計算機小白,希望所學知識能夠幫助大家
shell指令碼中大括號的特殊用法
$ 獲取變數的長度
[root@mysqlserver01 ~]# echo $ #var_name是未定義的變數
0[root@mysqlserver01 ~]# var_name=「abcd」
[root@mysqlserver01 ~]# echo $
4$ 刪除第乙個.以及它之前的內容,就是保留第乙個.後面的內容。.是可以 用任意字元替換
[root@mysqlserver01 ~]# dir_path=「123/opt/abc/f1.txt」
[root@mysqlserver01 ~]# echo $
opt/abc/f1.txt
[root@mysqlserver01 ~]# dir_path=「aaa/opt/abc/f1.txt」
[root@mysqlserver01 ~]# echo $
opt/abc/f1.txt
$ 刪除最後乙個.以及它之前的內容,就是保留最後乙個.後面的內容。
[root@mysqlserver01 ~]# dir_path=「aaa/opt/abc/f1.txt」
[root@mysqlserver01 ~]# echo $
f1.txt
$ 刪除最後乙個.以及它之後的內容,就是保留最後乙個.前面的內容。
[root@mysqlserver01 ~]# dir_path=「aaa/opt/abc/f1.txt」
[root@mysqlserver01 ~]# echo $
aaa/opt/abc
$ 刪除第乙個.以及它之後的內容,就是保留第乙個.前面的內容。
[root@mysqlserver01 ~]# dir_path=「aaa/opt/abc/f1.txt」
[root@mysqlserver01 ~]# echo $
aaa$ 將變數中的第乙個old替換成new
[root@mysqlserver01 ~]# dir_path=「aaa/opt/abc/f1.txt」
[root@mysqlserver01 ~]# echo $
aaa/opt/abc/f1.txt
$ 將變數中的所有old替換成new
[root@mysqlserver01 ~]# dir_path=「aaa/opt/abc/f1.txt」
[root@mysqlserver01 ~]# echo $
aaa/opt/abc/f1.txt
補充:「*」表示萬用字元,用於匹配字串將被刪除的字串。「.」表示字串中分隔符,可以為任意乙個或多個字元。「%」表示從右向左匹配,「#」表示從左向右匹配,「/」表示替換,都屬於非貪婪匹配,即匹配符合萬用字元的最短結果。與「%」、「#」和「/」類似的有「%%」、「##」和「//」,都屬於貪婪匹配,即匹配符合萬用字元的最長結果。
$ 刪除變數的前面的offset個字元 注:offset是指數字
[root@mysqlserver01 ~]# dir_path=「aaa/opt/abc/f1.txt」
[root@mysqlserver01 ~]# echo $
a/opt/abc/f1.txt
[root@mysqlserver01 ~]# echo $
/opt/abc/f1.txt
$ 跳過變數的前面的offset個字元,獲取length個字元。
[root@mysqlserver01 ~]# dir_path=「aaa/opt/abc/f1.txt」
[root@mysqlserver01 ~]# echo $
/opt/
[root@mysqlserver01 ~]# echo $
pt/$ 獲取變數最後offset個字元
[root@mysqlserver01 ~]# dir_path=「aaa/opt/abc/f1.txt」
[root@mysqlserver01 ~]# echo $
txt$ 獲取變數最後offset個字元中的前length個字元
注意:offset>length
[root@mysqlserver01 ~]# dir_path=「aaa/opt/abc/f1.txt」
[root@mysqlserver01 ~]# echo $
txt[root@mysqlserver01 ~]# echo $
1.t[root@mysqlserver01 ~]# echo $
1.txt
[root@mysqlserver01 ~]# echo $
1.txt
$ 如果變數值為空或者變數未定義,就會用word來替換。
[root@s1 ~]# set | grep 「^abc=」 # set獲取所有變數
[root@s1 ~]# echo $
hello #但是abc仍然沒有定義,echo $輸出為空
[root@s1 ~]# abc=
[root@s1 ~]# echo $
hello
$ 如果變數值為空,就會重新賦值為word。如果變數未定義,就會定義變數並且賦值為word。否則沒有任何變化。
[root@centos6 ~]# echo $var100
[root@centos6 ~]# set | grep var100
[root@centos6 ~]#
[root@centos6 ~]# echo $
123[root@centos6 ~]# set | grep var100
var100=123
[root@centos6 ~]# echo $
123[root@centos6 ~]# set | grep var100
var100=123
[root@centos6 ~]# var100=
[root@centos6 ~]# echo $
456$
如果變數已定義並且已賦值,就會返回word。否則沒有任何變化。
[root@centos6 ~]# echo $var200
[root@centos6 ~]# set | grep var200
[root@centos6 ~]# echo $
[root@centos6 ~]# var200=
[root@centos6 ~]# echo $
[root@centos6 ~]# var200=abc
[root@centos6 ~]# echo $
123[root@centos6 ~]# echo $var200
abc$ 判斷變數是否已定義,如果未定義,會報錯。
[root@s1 ~]# abc=
[root@s1 ~]# echo $
hello
[root@s1 ~]# echo $
[root@s1 ~]# set | grep 「^aaa=」
[root@s1 ~]# echo $
-bash: aaa: parameter null or not set
$ 如果變數未定義或者未賦值,就會報錯並且報錯資訊修改為message。(預設的報錯資訊是parameter null or not set)
[root@centos6 ~]# echo $var300
[root@centos6 ~]# set | grep var300
[root@centos6 ~]# echo $
-bash: var300: parameter null or not set
[root@centos6 ~]# echo $
-bash: var300: error
[root@centos6 ~]# var300=
[root@centos6 ~]# echo $
-bash: var300: parameter null or not set
[root@mysqlserver01 tmp]# error_var=「error」
[root@mysqlserver01 tmp]# echo katex parse error: expected '}', got 'eof' at end of input: } #冒號後邊也可以使用變數
-bash: aaaaaa: error
[root@mysqlserver01 tmp]# error_var=「failed」
[root@mysqlserver01 tmp]# echo katex parse error: expected '}', got 'eof' at end of input: }
-bash: aaaaaa: failed
v ar
name
:?me
ssag
e和和va
rnam
e:?m
essa
ge和的區別:
$ 當未定義變數varname,則會報錯
$ 當未定義變數varname或者變數varname的值為空,才會報錯
[root@mysqlserver01 ~]#
[root@mysqlserver01 ~]# echo $
-bash: a: parameter null or not set
[root@mysqlserver01 ~]# a=
[root@mysqlserver01 ~]# echo $
[root@mysqlserver01 ~]# echo $
-bash: a: parameter null or not set
[root@mysqlserver01 ~]# echo $
-bash: b: parameter null or not set
補充:word可以為乙個字串,也可以為乙個變數。當為變數時,需要用「$」引用該變數。
linux中除錯shell指令碼
原來的指令碼check.sh monfile var log test testmon.txt logfile var log test testmon.log touch monfile 該指令碼是在window裡編輯的,編輯後上傳到linux的 問題 執行後,目錄下出現的檔案是testmon.t...
Linux 中shell指令碼 eval調研
eval可以讀取一連串的引數,然後按照引數特性來執行。引數數目不限,彼此之間用分號隔開。eval會對後面的命令進行兩遍掃瞄,如果第一遍掃瞄後,命令是個普通命令,則執行此命令 如果命令中含有變數的間接引用,則保證間接引用的語義。也就是說,eval命令將會首先掃瞄命令列進行所有的置換,然後再執行該命令。...
Linux 中shell指令碼之符號篇
shell簡介 shell的作用是解釋執行使用者的命令戶,有兩種執行方式 互動式 使用者輸入一條命令,shell就解釋執行一條 批處理 batch 使用者事先寫多個shell指令碼 script 其中有很多條命令,讓shell一次把這些命令執行完,而不必一條一條地敲命令。shell指令碼和程式語言很...