20.10 for循環html
20.11/20.12 while循環linux
20.13 break跳出循環shell
20.14 continue結束本次循環bash
20.15 exit退出整個腳本htm
擴展ip
select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html字符串
20.10 for循環:get
for循環會以空格或回車做爲一個分隔符來遍歷的。若是for循環一個文件的話,文件名含有空格,他會認爲這個兩個文件input
~1.語法:for 變量名 in 條件; do …; doneit
~2.for循環案例1(需求:計算1-100全部數字的和)
#!/bin/bash
sum=0 #首先賦予sum的值等於0,稍後引用這個sum
for i in `seq 1 100` #for循環出1-100的數字
do #而後作什麼?
sum=$[$sum+$i] #賦予這個sum的變量,等於0+1到100。也就是利用上面那個sum賦予這個sum相加的動做
echo $i #顯示出1到100這個循環。不加上的話,直接顯示相加的總數字
done #結束
echo $sum #最後顯示$sum這個變量
~3.for循環案例2(需求:把etc目錄作遍歷。把etc目錄下的子目錄所有列一下)
文件列表循環
#!/bin/bash
cd /etc/
for a in `ls /etc/`
do
if [ -d $a ]
then
ls -d $a #列出etc下的子目錄。並不包括子子目錄
fi
done
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20.11/20.12 while循環:
~1.語法 while 條件; do … ; done
~2.案例1(需求:每一個半分鐘檢查系統的負載,當負載大於10的時候就發一封郵件)
#!/bin/bash
while : #冒號爲死循環。也能夠寫成true(真)。同樣的效果
do
load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1` #把load賦值
w爲 查看系統負載的
head -1爲 查看他的第一行
awk -F 'load average: ' '{print $2}' 爲以load average做爲分隔符。並打印這一行的第二段。注意,以load average做爲分隔符的時候後面能夠加上一個空格,由於出來的負載值前面有個空格,要把這個空格消掉
cut -d. -f1 爲以點爲分隔,截取第一段
就達到了咱們w查看1分鐘以內的系統負載
if [ $load -gt 10 ] #當他大於10的時候
then #而後發郵件
/usr/lib/zabbix/alertscripts/mail.py "load is high: $load" asldkfls@11.com
#咱們用以前zabbix上寫的mail.py來發送郵件
#雙引號裏面的是主題
#後面的是發送給誰
fi
sleep 30 #30秒查一次
done
~3.案例2(需求:也是一個死循環。要求與人有交互,當輸入空格的時候怎麼樣,輸入數字的時候怎麼樣)也個就是讓用戶不停地輸入數字的一個腳本。用到了continue、break
#!/bin/bash
while :
do
read -p "Please input a number: " n
if [ -z "$n" ]
then
echo "you need input sth."
continue #繼續以上的這個循環。也就是後面的就不用在執行了
fi
n1=`echo $n|sed 's/[0-9]//g'` #過濾出數字
if [ -n "$n1" ] #若是數字不爲空。也就表明有特殊字符或字母
then
echo "you just only input numbers."
continue #繼續以上這兩個循環開始
fi
break #跳出這個腳本的循環(知足以上倆個條件後,跳出循環)
done
echo $n #最終顯示$n(輸入的打印出來)
!!小知識點,當寫腳本的須要中文的時候,出現亂碼,多是沒有設置中文的UTF8。LANG=zh_CN.UTF8
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20.13 break跳出循環:
break用在循環裏,for也行,while也能夠
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ] #若是截取的是字符串就要用==(好比單詞),數字的話用-eq
#也就是當$i等於3的時候,就不顯示了。由於下面跳出這個循環了
then
break
fi
echo $i
done
echo aaaaaaa
[root@axinlinux-01 shell]# sh break1.sh #跳出循環並無顯示4 5
1
1
2
2
3
aaaaaaa
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20.14 continue結束本次循環:
~1.忽略continue之下的代碼,直接進行下一次循環
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ]
then
continue
fi
echo $i
done
echo $i
[root@axinlinux-01 shell]# sh continue
1
1
2
2
3 #在if [$i == 3 ]的時候就直接結束此次循環。繼續執行下面的循環。跟break不一樣,break是直接跳出了,結束了
4
4
5
5
aaaaaaa
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20.15 exit退出整個腳本:
~1.直接退出整個腳本,下面的全部不執行
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ]
then
exit 2 #這裏能夠定義exit的數字,也就是咱們echo $?時的值
fi
echo $i
done
echo aaaaaaa
[root@axinlinux-01 shell]# sh exit.sh
1
1
2
2
3
[root@axinlinux-01 shell]# echo $?
2
總結:
continue 結束本次循環
break 結束整個循環
exit 退出整個腳本