Shell指令碼學習筆記 二 變數

2021-05-24 12:44:36 字數 2241 閱讀 1912

變數與字串

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

不必經過事先宣告的程式想用就用

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

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

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

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

echo  printf  顯示變數值

取消變數:

unset 變數名  先找變數再找函式

unset -v 變數名  取消變數

unset -f 函式名  取消函式

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

雙引號括起變數可進行:替換變數;替換命令執行結果;替換算術運算結果   

單引號的作用是形成乙個所見即所得的字串(寫什麼就顯示什麼),不會進行任何替換變數的操作

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

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

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

各種bash內建變數

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

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

取消別名:unalias 別名

陣列:下標從0開始,顯示或獲取某元素值:$

也可以指定個別元素的索引,如:c=

取出陣列所有元素:$  以空白隔開的  或$   一整個字串

取得陣列元素個數:$或$

若陣列元素是字串,$獲得某元素長度

取消陣列或陣列元素:unset a  unset a[i]

利用here document,打包c等的原始碼。乙個攜帶攻擊程式的原型。

高階變數

變數擴充套件是一種簡易的條件判斷,對不同的條件賦予變數不同的替換值,即:變數擴充套件是對基本型加上條件判斷,如若條件符合(如不存在或空值),則進行變數替換,若不符合,也有相應做法,它其實是一種隱含的"if-then-else"的程式語法

「變數存在」的定義:如果變數曾設值過,則稱變數存在,反之不曾設值過,或曾用unset取消變數,則稱變數不存在或未定義

測試變數「存在與否」:$

測試變數「不存在」或其值為空:

「傳回」乙個預設值  $  主要用途:在script中這個變數一定要有值才行,因此變數擴充套件的結果一定要傳回乙個非空值(使用預設值或變數值)

[-n #] && set -v

給變數設乙個預設值

提示錯誤資訊:$  顯示變數名稱和提示資訊,並立即停止執行script

條件式的用途:確保某變數值一定要存在,否則若是繼續執行,恐怕會發生嚴重後果

測試變數的「存在性":$  用來測試某件事是真的

整理小結:

取字串切片、長度:$,$

取部分位置引數 $,$

計算長度:$

對比樣式:

由前面相比,刪除最短的$;刪除最長的$

由後面相比,刪除最短的$;刪除最長的$

取代或刪除部分字串,只替換第乙個對比符合的字串$,全部符合的$;只刪除第乙個對比符合的字串$,全部符合的$

整理小結:

獲取變數名稱列表、陣列索引列表:

$或$$或$

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

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

學習Shell(二)變數

如何給shell指令碼傳入引數 1.執行 vi test.sh 建立乙個新的shell指令碼。vi test.sh 2.指令碼test.sh的內容如下 bin sh name 1 echo the are great man 3.給新建立的test.sh的指令碼賦可執行許可權,命令為 chmod 7...

PyTorch學習筆記(二) 變數

在 torch 中,variable 是乙個存放會變化的值 變數 的地理位置。可以理解為乙個容器,裡面的值會不停的變化,就像乙個裝雞蛋的籃子,雞蛋數會不停變動。那誰是裡面的雞蛋呢,自然就是 torch 的 tensor 如果用乙個 variable 進行計算,那返回的也是乙個同型別的 variabl...

Shell指令碼筆記(二)Shell變數

全域性變數對於定義它的shell和其子shell都是可見的,但如果生成它的shell被終止,全域性變數也就消失了。另外全域性變數會被子shell的同名變數覆蓋。定義乙個全域性變數 export a i want break free 或者 b sunday morning export b 刪除乙個...