主要內容:bash
邏輯判斷:test關鍵字app
選擇結構:if-else, caseide
邏輯判斷code
bash不只能夠進行數值運算,經過test關鍵字還能夠進行邏輯判斷。blog
數值大小的判斷字符串
例如判斷3是否大於2的大小:it
test 3 -gt 2; echo $?
0
注意:判斷成立,返回0,不成立返回1。io
文本字符串的判斷class
例如判斷兩文本是否相等:test
test abc = abx; echo $?
1
由於判斷不成立,因此返回1。
另外注意:等號的兩側要有空格,不然就變成變量賦值了!
文件的判斷
例如判斷文件是否存在:
test -e a.out; echo $?
選擇結構
if-else
類比C語言中的if else-if else結構,注意結尾是fi,即if反過來寫。
if condition1 then command1 elif condition2 then command2 else commandN fi
例如,demo_if.sh內容以下:
#!/bin/bash var=`whoami` if test $var = "root" then echo "You are root" else echo "$var, You are not root" fi
case
類比C語言中的switch-case結構,注意,break被;;取代,結尾是esac,即case反過來寫。
case 值 in 模式1) command1 command2 ;; 模式2) command1 command2 ;; esac
例如,demo_case.sh代碼以下:
#!/bin/bash var=`whoami` echo "You are $var" case $var in root) echo "You are God." ;; deeplearning) echo "You are a happy user." ;; *) echo "You are the others." ;; esac
注意:文本標籤除了是一串具體的文本,還能夠包含通配符,如;
循環結構
while
類比C語言中的while-do結構,注意以done結尾。
例如demo_while.sh代碼以下(注意符號+以前有一個空格!):
#!/bin/bash now=`date +'%Y%m%d%H%M'` deadline=`date --date='30 second' +'%Y%m%d%H%M'` while test $now -lt $deadline do date echo "not yet" sleep 10 now=`date +'%Y%m%d%H%M'` done echo "now, deadline reached"
2019年 11月 11日 星期一 15:07:31 CST not yet 2019年 11月 11日 星期一 15:07:41 CST not yet 2019年 11月 11日 星期一 15:07:51 CST not yet now, deadline reache
for
類比C語言中的for結構,注意也是以done結尾。
例如demo_for.sh代碼以下:
#!/bin/bash for var in `ls log*` do rm $var done
該腳本的功能是查找本目錄中以「log」開頭的文件,並將其依次刪除。
另外,結合seq關鍵字,能夠控制循環次數,好比:
seq 1 2 10
1 3 5 7 9
應用舉例
#!/bin/bash
total=0
for number in seq 1 1 100
do
total=$(($total+$number))
done
echo $total
5050
也能夠用while-do結構:
#!/bin/bash
total=0
num=1
while :
do
if test $num -gt 100
then
break
fi
total=$(($total+$num))
num=$(($num+1))
done
echo $total
計算1到100全部不被3整除的數的和,使用**continue語句**:
#!/bin/bash
total=0
for num in seq 1 1 100
do
if test $((${num}%3)) -eq 0
then
continue
fi
total=$(($total+$num))
done
echo $total
3367