shell學習總結-2

秦無殤發表於2019-04-03

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}"
View Code

輸出:

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