Shell指令碼學習筆記(二)–變數

來源:互聯網
上載者:User

變數與字串

Bash shell沒有所謂的“資料形態”,除非使用內建declare特別指定變數的型態。在Bash shell中,只有一種資料型態:以字元組成的字串

不必經過事先聲明的程式想用就用

設定變數值之後,該變數值只在當前的shell環境中有效。變數名長度無限制,區分大小寫。

設定變數的方法:變數名稱=值  但好的習慣是把字串用雙引號或單引號括起來。等號的兩邊不能有空白,右側有空白時要用引號括起來。

為避免出錯,可規定變數一律要先經過設定的程式才能使用。方法:shopt -s -o nounset

取得變數值:$變數名稱或${變數名稱},如變數的後面接有其他英、數單詞或底線,須用{}隔開$和變數名稱,如${myname}Mmm  否則,不必

echo  printf  顯示變數值

取消變數:
unset 變數名  先找變數再找函數
unset -v 變數名  取消變數
unset -f 函數名  取消函數

清空變數:變數名=   其值為null(空),但變數還存在

雙引號括起變數可進行:替換變數;替換命令執行結果;替換算術運算結果   
單引號的作用是形成一個所見即所得 (WYSIWYG)的字串(寫什麼就顯示什麼),不會進行任何替換變數的操作

變數的執行範圍,僅在各自的shell環境中有效

使變數成為環境變數,就能為子shell取用  export  declare -x 變數=""

取消環境變數:testVar=   或 unset testVar

各種Bash內建變數

唯讀變數:readonly 變數名    readonly -f 函數名   readonly -a 數組名   declare -r 變數名  declare調整變數屬性的方法

別名:alias  別名=指令  不能有空白,右側有時單引號括起來,可遞迴定義
取消別名:unalias 別名

數組:下標從0開始,顯示或擷取某元素值:${數組名[索引值]}
也可以指定個別元素的索引,如:c={[3]=10,[1]=20,[10]=30}
取出數組所有元素:${B[@]}  以空白隔開的  或${B[*]}   一整個字串
取得數組元素個數:${#數組[@]}或${#數組[*]}
若數組元素是字串,${#數組[索引]}獲得某元素長度
取消數組或數組元素:unset A  unset A[i]

利用Here Document,打包C等的原始碼。一個攜帶攻擊程式的原型。

進階變數

變數擴充是一種簡易的條件判斷,對不同的條件賦予變數不同的替換值,即:變數擴充是對基本型加上條件判斷,如若條件符合(如不存在或空值),則進行變數替換,若不符合,也有相應做法,它其實是一種隱含的"if-then-else"的程式文法
“變數存在”的定義:如果變數曾設值過,則稱變數存在,反之不曾設值過,或曾用unset取消變數,則稱變數不存在或未定義
測試變數“存在與否”:${待測變數-預設值}
測試變數“不存在”或其值為空白:
“傳回”一個預設值  ${待測變數:-預設值}  主要用途:在script中這個變數一定要有值才行,因此變數擴充的結果一定要傳回一個非空值(使用預設值或變數值)
[-n #{DEBUG:-}] && set -v
給變數設一個預設值
提示錯誤資訊:${待測變數:?提示資訊}  顯示變數名稱和提示資訊,並立即停止執行script
條件式的用途:確保某變數值一定要存在,否則若是繼續執行,恐怕會發生嚴重後果
測試變數的“存在性":${待測變數:+真值}  用來測試某件事是真的
整理小結:


取字串切片、長度:${變數:位置起點},${變數:位置起點:長度}
取部分位置參數 ${@:起點},${@:起點:個數}
計算長度:${#變數名}

對比樣式:
由前面相比,刪除最短的${變數#樣式};刪除最長的${變數##樣式}
由後面相比,刪除最短的${變數%樣式};刪除最長的${變數%%樣式}
取代或刪除部分字串,只替換第一個對比符合的字串${變數/樣式/替換字串},全部符合的${變數//樣式/替換字串};只刪除第一個對比符合的字串${變數/樣式/},全部符合的${變數//樣式/}
整理小結:

擷取變數名稱列表、數組索引列表:
${!陣列變數[@]}或${!陣列變數[*]}
${!開頭字串@]}或${!開頭字串*]}

命令替換:變數名=$(命令)或變數名=`命令`,提倡前者

算術擴充:$((算術式)),才會運算,不然就一字串

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.