shell中各種括號的用法
阿新 • • 發佈:2021-08-06
一、單小括號()
1、將某個命令的返回值作為某個變數的值進行傳遞
#!/bin/bash USER=$(whoami) echo $USER [root@jump ~]# for i in $(seq 0 4);do echo $i;done 0 1 2 3 4
2、用於初始化陣列
array=(1 2 3 4)
二、雙小括號(())
1、整數運算(不支援浮點型)
[root@jump ~]# echo $((1+1)) 2
2、進位制轉換
16進位制轉10進位制 [root@jump ~]# echo $((16#5f)) 95
3、重新定義變數的值
[root@jump ~]# for ((i=0;i<5;i++));do echo $i;done 0 1 2 3 4
4、算數比較
[root@jump ~]# i=5;if (($i>1));then echo "yes";fi yes
三、單中括號[...]
算數比較 [root@jump ~]# i=5;if [ $i -ge 1 ];then echo "yes";fi yes
四、雙中括號[[...]]
支援字串模式匹配,甚至支援正則表示式;使用[[...]]條件判斷,能夠防止指令碼中的許多邏輯錯誤,比如,&&、||、<和> 操作符能夠正常存在於[[ ]]條件判斷結構中,但是如果出現在[ ]結構中的話,會報錯; [root@jump ~]# if [[ hello==hell? ]];then echo "yes";fi yes
五、大括號{...}
1、常規用法
for i in {1..4};do echo $i;done #列印1到4的數字; touch {1..4}.txt #建立1.txt 2.txt 3.txt 4.txt檔案 touch {1,4}.txt #建立1.txt 4.txt檔案
2、變數替換
2.1、${var:-string}和${var:=string}
如果變數var為空,則將string賦值給${var:-string}和${var:=string};
[root@jump ~]# cat aaa.sh #!/bin/bash NUM=$1 if [ ${NUM:="1"} -gt 10 ];then echo "比10大" else echo "比10小" fi echo "輸入值為:"${NUM:-"1"} [root@jump ~]# bash aaa.sh 比10小 輸入值為:1 [root@jump ~]# bash aaa.sh 55 比10大 輸入值為:55
2.2、${var:+string}
變數var不為空的時候,才將string賦值給${var:+string};
2.3、${var:?string}
變數為空的時候,則把string輸出到標準錯誤中,並從指令碼中退出;
[root@jump ~]# cat str.sh #!/bin/bash NUM=$1 if [ ${NUM:?"1"} -gt 10 ];then echo "比10大" else echo "比10小" fi [root@jump ~]# bash str.sh str.sh:行3: NUM: 1 [root@jump ~]# bash str.sh 3 比10小
2.4、模式匹配
# 是去掉左邊 % 是去掉右邊 #和%中的單一符號是最小匹配,兩個相同符號是最大匹配。 [root@jump ~]# var="hello word" [root@jump ~]# echo $var hello word [root@jump ~]# echo ${var%o*d} hello w [root@jump ~]# echo ${var%%o*d} hell [root@jump ~]# echo ${var#?e} llo word [root@jump ~]# echo ${var##?e} llo word [root@jump ~]# echo ${var##*e} llo word [root@jump ~]# echo ${var##*s} hello word [root@jump ~]# echo ${var##*d} [root@jump ~]# echo ${var##*r} d [root@jump ~]# echo ${var##hello} word
以上操作都不會改變variable的值,其中,只有在pattern中使用了*匹配符號時,%和%%,#和##才有區別。結構中的pattern支援萬用字元,*表示零個或多個任意字元,?表示僅與一個任意字元匹配,[...]表示匹配中括號裡面的字元,[!...]表示不匹配中括號裡面的字元。
2.5、字串的提取和替換
[root@jump ~]# var=/data/nginx [root@jump ~]# echo $var /data/nginx [root@jump ~]# echo ${var:5} /nginx [root@jump ~]# echo ${var: -5} nginx [root@jump ~]# echo ${var: -6} /nginx [root@jump ~]# echo ${var:(-6)} /nginx [root@jump ~]# echo ${var:1:4} data [root@jump ~]# echo ${var/t/a} /daaa/nginx [root@jump ~]# echo ${var/a/o} /dota/nginx [root@jump ~]# echo ${var//a/o} /doto/nginx