linux中shell指令碼大括號的特殊用法

2021-09-11 08:02:42 字數 4866 閱讀 8384

計算機小白,希望所學知識能夠幫助大家

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指令碼和程式語言很...