1:環境變量php
環境變量能夠幫咱們達到不少功能~包括家目錄的變換啊、提示字符的顯示啊、運行文件搜尋的路徑啊等等的那麼,既然環境變量有那麼多的功能,問一下,目前個人 shell 環境中, 有多少默認的環境變量啊?咱們能夠利用兩個命令來查閱,分別是 env 與 export 呢!linux
such as:[root@hadoopHost ~]# export 或者env shell
常見的環境變量有:數組
[root@www ~]# declare -i number=$RANDOM*10/32768 ; echo $number 8 <== 此時會隨機取出 0~9 之間的數值喔! |
2:自定義變量(包含 bash 操做接口有關的變量)bash
除了那些環境變量外,還有一些還有一些與 bash 操做接口有關的變量以及用戶自定義的變量,這類變量改如何查詢呢?dom
用 set 觀察全部變量 (含環境變量與自定義變量)函數
通常來講,不管是否爲環境變量,只要跟咱們目前這個 shell 的操做接口有關的變量, 一般都會被配置爲大寫字符,也就是說,『基本上,在 Linux 默認的狀況中,使用{大寫的字母}來配置的變量通常爲系統內定須要的變量』有哪些是比較重要的系統變量呢?大概有這幾個吧!oop
[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