變數與字串
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 刪除乙個...