shell循環判斷語法
for循環數字1-100得出數字1到100的和
[root@localhost src]# cat fors.sh #!/bin/bash sum=0 for a in `seq 1 100` do ? sum=$[$a+$sum] done echo $sum [root@localhost src]# sh -x fors.sh + sum=0 ? ? ? ? ? ? 部分執行過程 ++ seq 1 100 + for a in ‘`seq 1 100`‘ + sum=1 + for a in ‘`seq 1 100`‘ + sum=3 + for a in ‘`seq 1 100`‘ + sum=6 .................省略 + for a in ‘`seq 1 100`‘ + sum=4851 + for a in ‘`seq 1 100`‘ + sum=4950 + for a in ‘`seq 1 100`‘ + sum=5050 + echo 5050
for循環遍歷出文件或目錄,這裏遍歷出某個目錄下的所有目錄。使用if ?-d來判斷是否是個目錄
[root@localhost src]# cat fors.sh
#!/bin/bash
cd /usr/local/src/
for a in `ls /usr/local/src`
do
?if [ -d $a ]
? ?then
? echo $a
?fi
done
[root@localhost src]# sh fors.sh
cmake-3.12.2
nginx-1.15.2
php-5.6.37
php-7.1.21
zabbix-3.4.13
for循環會對空格和回車符作為分割符處理,在遍歷後會把以空格相連的文件名會處理成兩個文件(會變為兩個文件名稱來顯示),如有以下幾個文件:
[root@localhost src]# ll *.txt
-rw-r--r-- 1 root root 75 Sep 17 16:32 1.txt
-rw-r--r-- 1 root root 0 Sep 17 16:32 2.txt
-rw-r--r-- 1 root root 0 Sep 17 16:32 5 3.txt
[root@localhost src]# sh foss.sh
/usr/local/src/1.txt
/usr/local/src/2.txt
/usr/local/src/5
3.txt
for循環處理空格分割的文件或字符串時會把空格作為換行符來處理,導致一個含有空格的目錄或文件的一串字符會變為兩串字符
while循環
語法 while 條件; do 語句; done ? ? ? ?//這個寫法的 true和while :; ?表示死循環
這裏使用while循環簡單判斷監控一個數值,如果獲取的數值大於特定值則執行某些操作,操作可以是執行發送郵件,sleep表示每隔多少秒執行一次整個循環
[root@localhost src]# cat while.sh
#!/bin/bash
while true
do
? load=`w |head -1 |awk -F ‘load average:‘ ‘{print $2}‘ |cut -d. -f1`
? ?if [ $load -gt 10 ]
? ? ?then
? ? ? ? echo "1234" ? ? ? ? //這裏也可以是發送郵件的命令
? ?fi
? ? ? sleep 10
?done
while結合if來判斷一個輸入的數值是否符合規則
while循環輸入一個 數值來正確判斷,來判斷輸入的值是否是一個純數字,如果不是則會繼續執行循環讓繼續來輸入值,直到輸入正確為止,直至輸入正確後才會結束並退出這個while循環
第一次read -p把輸入值賦予給變量n,讓變量n和一個特定值做下比對,如果符合條件則跳過這個判斷結果並使用continue結束單次循環並echo出結果。
如果輸入的字符不為數字,且變量不是空的話,那麽該次判斷不會結束循環並往下執行。將輸入變量所有的數字替換為空。
如果包含字母則無法替換為空。並且把替換的這個結果做一個非空判斷,如果輸入的是數字的話,那麽這個值已經被替換成空的了。如果是非數字則不能針對字母做替換,然後繼續循環讓輸入一個純數字
while :;
? do
? ? read -p "Please input a number: " n
?if [ -z "$n" ]
? ? then
? ? ? echo "輸入驗證"
? ? ? ? continue
?fi
? ?n1=`echo $n |sed ‘s/[-0-9]//g‘`
?if [ ! ?-z "$n1" ]
? ? then
? ? ? echo "請輸入一個純數字"
? ? ? ? continue
?fi
? ? break
done
echo $n
break跳出循環
在循環判斷中,如果獲取的一個變量大於或等於特定值時,則會執行該判斷下的執行語句,這個語句且是break跳出動作並繼續執行腳本中剩下的語句,那麽這個循環如果等於或大於這個特定值就會執行break,執行break後,則這個循環中還有其他語句或判斷的話則不會去執行了,直接終止這個循環語句
[root@localhost src]# cat while.sh
#!/bin/bash
for i in `seq 1 4`
do
echo $i
? if [ $i -eq 3 ]
? ? then
? ? ? break
? fi
?echo $i
done
echo abc
[root@localhost src]# sh while.sh
1
1
2
2
3
abc
continue結束本次循環
continue結束的循環是匹配特定值的本次循環。如果獲取的數值等於或大於特定值,則結束本次循環,並終止執行continue以下的語句。但是結束本次循環後並非退出循環,而是繼續從循環中獲取數據來執行特定語句,直到這個循環範圍結束(如1-6、a-f ?等)
[root@localhost src]# cat continue.sh
#!/bin/bash
for i in `seq 1 4`
do
echo $i
? if [ $i -eq 3 ]
? ? then
? ? ? continue
? fi
?echo $i
done
echo abc
[root@localhost src]# sh while.sh
1
1
2
2
3
4
4
5
5
abc
exit退出整個腳本
如果判斷一個從循環獲取的變量大於或等於特定值,恰好循環獲取的值匹配上了特定值時,則會執行該判斷下的語句和exit退出動作,exit ?退出表示我之下的所有內容和不在我這個循環內的內容都不執行了,直接退出整個腳本
?
[root@localhost src]# cat exit.sh
#!/bin/bash
for i in `seq 1 5`
do
? ?echo $i
? ?if [ $i == 3 ]
? ?then
? ? ? ?exit
? ?fi
? ?echo $i
done
echo aaaaaaa
shell循環判斷語法