1:環境變量
環境變量可以幫我們達到很多功能~包括家目錄的變換啊、提示字符的顯示啊、運行文件搜尋的路徑啊等等的那麼,既然環境變量有那麼多的功能,問一下,目前我的 shell 環境中, 有多少默認的環境變量啊?我們可以利用兩個命令來查閱,分別是 env 與 export 呢!
such as:[root@HadoopHost ~]# export 或者env
常見的環境變量有:
[root@www ~]# declare -i number=$RANDOM*10/32768 ; echo $number 8 <== 此時會隨機取出 0~9 之間的數值喔!
2:自定義變量(包含 bash 操作接口有關的變量)
除了那些環境變量外,還有一些還有一些與 bash 操作接口有關的變量以及用戶自定義的變量,這類變量改如何查詢呢?
用 set 觀察所有變量 (含環境變量與自定義變量)
一般來說,不論是否為環境變量,只要跟我們目前這個 shell 的操作接口有關的變量, 通常都會被配置為大寫字符,也就是說,『基本上,在 Linux 默認的情況中,使用{大寫的字母}來配置的變量一般為系統內定需要的變量』有哪些是比較重要的系統變量呢?大概有這幾個吧!
[root@www /home/dmtsai 16:50 #12]#那個 # 代表第 12 次下達的命令。那麼應該如何配置 PS1 呢?可以這樣啊:
[root@www ~ ]# cd /home [root@www home]# PS1='[\u@\h \w \A #\#]\$ ' [root@www /home 17:02 #85]# # 看到了嗎?提示字符變了!變的很有趣吧!其中,那個 #85 比較有趣, # 如果您再隨便輸入幾次 ls 後,該數字就會添加喔!為啥?上面有說明滴!
?:(關於上個運行命令的回傳值)
什麼?問號也是一個特殊的變量?沒錯!在 bash 裡面這個變量可重要的很! 這個變量是:『上一個運行的命令所回傳的值』, 上面這句話的重點是『上一個命令』與『回傳值』兩個地方。當我們運行某些命令時, 這些命令都會回傳一個運行後的代碼。一般來說,如果成功的運行該命令, 則會回傳一個 0 值,如果運行過程發生錯誤,就會回傳『錯誤代碼』才對!一般就是以非為 0 的數值來取代。
3:自定義變量轉成環境變量---export
談了 env 與 set 現在知道有所謂的環境變量與自定義變量,那麼這兩者之間有啥差異呢?其實這兩者的差異在於『 該變量是否會被子程序所繼續引用』
如你想要讓該變量內容繼續的在子程序中使用,那麼就請運行:
[root@www ~]# export 變量名稱
我們常常在自己的主控文件後面呼叫其他附屬文件(類似函式的功能),但是主控文件與附屬文件內都有相同的變量名稱, 若一再重復配置時,要修改也很麻煩,此時只要在原本的第一個文件內配置好『 export 變量 』, 後面所呼叫的文件就能夠使用這個變量配置了!而不需要重復配置,
如果僅下達 export 而沒有接變量時,那麼此時將會把所有的『環境變量』秀出來喔!例如:(跟env作用一樣)
[root@www ~]# export declare -x HISTSIZE="1000" declare -x HOME="/root" declare -x HOSTNAME="www.vbird.tsai" declare -x INPUTRC="/etc/inputrc" declare -x LANG="en_US" declare -x LOGNAME="root"
4:將環境變量轉成自定義變量----declare
declare 或 typeset 是一樣的功能,就是在『說明變量的類型』。如果使用 declare 後面並沒有接任何參數,那麼 bash 就會主動的將所有的變量名稱與內容通通叫出來,就好像使用 set 一樣啦! 那麼 declare 還有什麼語法呢?看看先:
[root@www ~]# declare [-aixr] variable 選項與參數: -a :將後面名為 variable 的變量定義成為數組 (array) 類型 -i :將後面名為 variable 的變量定義成為整數數字 (integer) 類型 -x :用法與 export 一樣,就是將後面的 variable 變成環境變量; -r :將變量配置成為 readonly 類型,該變量不可被更改內容,也不能 unset 范例一:讓變量 sum 進行 100+300+50 的加總結果 [root@www ~]# sum=100+300+50 [root@www ~]# echo $sum 100+300+50 <==咦!怎麼沒有幫我計算加總?因為這是文字型態的變量屬性啊! [root@www ~]# declare -i sum=100+300+50 [root@www ~]# echo $sum 450 <==瞭乎??
由於在默認的情況底下, bash 對於變量有幾個基本的定義:
現在你曉得為啥你需要進行變量聲明了吧?如果需要非字符串類型的變量,那就得要進行變量的聲明才行啦! 底下繼續來玩些其他的 declare 功能。
范例二:將 sum 變成環境變量 [root@www ~]# declare -x sum [root@www ~]# export | grep sum declare -ix sum="450" <==果然出現了!包括有 i 與 x 的宣告! 范例三:讓 sum 變成只讀屬性,不可更動! [root@www ~]# declare -r sum [root@www ~]# sum=tesgting -bash: sum: readonly variable <==老天爺~不能改這個變量了! 范例四:讓 sum 變成非環境變量的自定義變量吧! [root@www ~]# declare +x sum <== 將 - 變成 + 可以進行『取消』動作 [root@www ~]# declare -p sum <== -p 可以單獨列出變量的類型 declare -ir sum="450" <== 看吧!只剩下 i, r 的類型,不具有 x 啰!
5: read
要讀取來自鍵盤輸入的變量,就是用 read 這個命令了。這個命令最常被用在 shell script 的撰寫當中, 想要跟使用者對談?用這個命令就對了。關於 script 的寫法,我們會在第十三章介紹,底下先來瞧一瞧 read 的相關語法吧!
[root@www ~]# read [-pt] variable 選項與參數: -p :後面可以接提示字符! -t :後面可以接等待的『秒數!』這個比較有趣~不會一直等待使用者啦! 范例一:讓用戶由鍵盤輸入一內容,將該內容變成名為 atest 的變量 [root@www ~]# read atest This is a test <==此時光標會等待你輸入!請輸入左側文字看看 [root@www ~]# echo $atest This is a test <==你剛剛輸入的數據已經變成一個變量內容! 范例二:提示使用者 30 秒內輸入自己的大名,將該輸入字符串作為名為 named 的變量內容 [root@www ~]# read -p "Please keyin your name: " -t 30 named Please keyin your name: VBird Tsai <==注意看,會有提示字符喔! [root@www ~]# echo $named VBird Tsai <==輸入的數據又變成一個變量的內容了!
read 之後不加任何參數,直接加上變量名稱,那麼底下就會主動出現一個空白行等待你的輸入(如范例一)。 如果加上 -t 後面接秒數,例如上面的范例二,那麼 30 秒之內沒有任何動作時, 該命令就會自動略過了~如果是加上 -p ,嘿嘿!在輸入的光標前就會有比較多可以用的提示字符給我們參考!
6:數組 (array) 變量類型
數組的配置方式是:
var[index]=content
范例:配置上面提到的 var[1] ~ var[3] 的變量。 [root@www ~]# var[1]="small min" [root@www ~]# var[2]="big min" [root@www ~]# var[3]="nice min" [root@www ~]# echo "${var[1]}, ${var[2]}, ${var[3]}" small min, big min, nice min
Shell編程淺析 http://www.linuxidc.com/Linux/2014-08/105379.htm
Linux Shell參數替換 http://www.linuxidc.com/Linux/2013-06/85356.htm
Shell for參數 http://www.linuxidc.com/Linux/2013-07/87335.htm
Linux/Unix Shell 參數傳遞到SQL腳本 http://www.linuxidc.com/Linux/2013-03/80568.htm
Shell腳本中參數傳遞方法介紹 http://www.linuxidc.com/Linux/2012-08/69155.htm
Shell腳本傳遞命令行參數 http://www.linuxidc.com/Linux/2012-01/52192.htm