1、shell運算子
1.1、算數運算子
原生的bash不支援算數運算,可以通過其它方式實現例如expr。
1 `expr a + b` 2 #a b為數字,和運算子之間要有空格 3 #``不是單引號,為鍵盤上ESC鍵下方的反引號
示例如下:
1 #!/bin/sh 2 3 a=4 4 b=3 5 #加法 6 val=`expr ${a} + ${b}` 7 echo " ${a} + ${b} is :${val}" 8 9 #減法 10 val=`expr ${a} - ${b}` 11 echo " ${a} - ${b} is :${val}" 12 13 #乘法 14 val=`expr ${a} \* ${b}` 15 echo " ${a} * ${b} is :${val}" 16 17 #除法 18 val=`expr ${a} / ${b}` 19 echo " ${a} / ${b} is :${val}" 20 21 #取餘 22 val=`expr ${a} % ${b}` 23 echo " ${a} % ${b} is :${val}"
輸出:
4 + 3 is :7 4 - 3 is :1 4 * 3 is :12 4 / 3 is :1 4 % 3 is :1
1.2、關係運算子
關係運算子只支援數字,常見的關係運算子如下:
1 c=3 2 d=3 3 #等於 4 if [ ${c} -eq ${d} ] 5 then 6 echo "${c} is equal to ${d}" 7 fi 8 #不等於 9 d=2 10 if [ ${c} -gt ${d} ] 11 then 12 echo "${c} is great than ${d}" 13 fi
# -eq 不等於,[ ${c} -ne ${d} ]返回True
# -gt 檢測左邊數是否大於右邊,如果是,則返回True,反之,返回False
# -lt 檢測左邊數是否小於右邊,如果是,則返回True,反之,返回False
# -ge 檢測左邊數是否大於等於右邊,如果是,則返回True,反之,返回False
# -le 檢測左邊數是否小於等於右邊,如果是,則返回True,反之,返回False
輸出如下:
3 is equal to 3 3 is great than 2
1.3、布林運算子
1 #非運算!,表示式為True,則返回False 2 #與運算-o,有一個表示式為True則返回True 3 #或運算-a,兩個表示式為True則返回True
1 c=1 2 d=2 3 e=3 4 if [ ${c} -ne ${d} -o ${d} -eq ${e} ] 5 then 6 echo "${c} 不等於 ${d} 或者 ${d} 等於 ${e} ,返回True。" 7 fi
輸出如下:
1 不等於 2 或者 2 等於 3 ,返回True。
1.4、邏輯運算子
1 #&& 邏輯and 2 #|| 邏輯or
1 c=1 2 d=2 3 e=3 4 if [ ${c} -ne ${d} and ${d} -eq ${e} ] 5 then 6 echo "${c} 不等於 ${d} 並且 ${d} 等於 ${e} ,返回True。" 7 else 8 echo "${c} 不等於 ${d} 或者 ${d} 等於 ${e} ,返回True。" 9 fi
1 不等於 2 或者 2 等於 3 ,返回True。
1.5、字串運算子
1 # =,檢測兩個字串是否相等,相等則返回True
# !+,檢測兩個字串是否不等,不等則返回True
# -z,檢測字串是否為零,為零返回True
# -n,檢測字串是否不為零,為零返回False
# $ ,檢測字串是否為空,不為空返回True
示例如下:
1 a="Hello" 2 b="Hello" 3 if [ ${a} = ${b} ] 4 then 5 echo "str ${a} is equal to ${b}" 6 fi 7 8 if [ -n ${a} ] 9 then 10 echo "str ${a} is not zero. "
輸出如下:
str Hello is equal to Hello
str Hello is not zero.
1.6、檔案檢測運算子
1 #-w ${file} 檢測檔案是否可寫,可寫則返回True 2 #-r ${file} 檢測檔案是否可讀,可寫則返回True 3 #-x ${file} 檢測檔案是否可執行,可執行則返回True 4 #-s ${file} 檢測檔案是否為空,不為空則返回True 5 #-e ${file} 檢測檔案或目錄是否存在,存在則返回True 6 #檔案檢測運算子比較多,此時不一一列舉
curr_path=`pwd`
if [ -e ${curr_path} ]
then
echo "dir ${curr_path} is exist."
fi
輸出如下:
dir /home/stephen/桌面 is exist.
2、shell流程控制
2.1、if
#!/bin/bash #假如 條件1成立,則執行語句1 #假如 條件1不成立,條件2成立,則執行語句2 #假如 條件1,2不成立,則執行語句3 if 條件1 then 語句1 elif 條件2 then 語句2 else 語句3
示例如下:
1 age=15 2 if [ ${age} -lt 16 ] 3 then 4 echo "age is ${age}, yonng" 5 elif [ ${age} 40 ] 6 then 7 echo "age is ${age},midlife" 8 else 9 echo "age is ${age},old" 10 fi
輸出如下:
age is 15, yonng
2.2、for迴圈
1 data_path=(data1 data2 data3) 2 for datai in ${data_path[@]} 3 do 4 echo ${datai} 5 done
輸出:
data1
data2
data3
1 for ((i=0;i<5;i++)) 2 do 3 echo ${i} 4 done
輸出:
0 1 2 3 4
2.3、while
#當條件1成立,迴圈執行語句1 while 條件1 do 語句1 done
示例如下:
1 i=1 2 while [ ${i} -lt 4 ] 3 do 4 echo "loop ${i}" 5 #語法 let "表示式" 6 let i++ 7 done
輸出如下:
loop 1 loop 2 loop 3
2.4、until
#當條件1不成立時,就執行語句1 until 條件1 do 語句1 done
示例如下:
1 j=7 2 until [ ${j} -lt 4 ] 3 do 4 echo "loop ${j}" 5 let j-- 6 done
輸出如下:
loop 7 loop 6 loop 5 loop 4