Linux01-BASH的while流程控制41
一、循環(huán)流程控制
? ?1、循環(huán):while, until, for
? ?2、break: 提前退出循環(huán)
? ? ? ?continue:提前結(jié)束本輪循環(huán),而進(jìn)入下一輪循環(huán);
? ?如:計(jì)算100以內(nèi)奇數(shù)的和;
#!/bin/bash
#
declare -i I=0
declare -i SUM=0
while [ $I -lt 100 ];do
? ? ? ?let I++
? ? ? ?if [ $[$I%2] -eq 0 ?];then
? ? ? ? ? ? ? ?continue
? ? ? ?fi
? ? ? ? ? ? ? ?SUM=$SUM+$I
done
? ? ? ?echo $SUM
? ?如:1000以內(nèi)的正整數(shù)相加,當(dāng)和大于5000時(shí)退出循環(huán);
#!/bin/bash
#
declare -i SUM=0
for I in {1..1000};do
? ? ? ?let SUM+=$I
? ? ? ?if [ $SUM -gt 5000 ];then
? ? ? ? ? ? ? ?break
? ? ? ?fi
done
? ? ? ?echo "I is $I."
? ? ? ?echo "SUM is $SUM."
? ?3、while的特殊用法
? ? ? ?a)while的特殊用法一:
? ? ? ? ? ?while :;do
? ? ? ? ? ? ? ?STATEMENT
? ? ? ? ? ?done
? ?如:判斷輸入內(nèi)容是否為文件,當(dāng)觸發(fā)quit時(shí)退出;
#!/bin/bash
#
while :;do
? ? ? ?read -p "File path:" FILEPATH
? ? ? ?[ $FILEPATH == 'quit' ] && break
? ? ? ?if [ -e $FILEPATH ];then
? ? ? ? ? ? ? ?echo "$FILEPATH exists."
? ? ? ?else
? ? ? ? ? ? ? ?echo "No$FILEPATH."
? ? ? ?fi
done
echo "Quit."
? ? ? ?b)while的特殊用法二:
? ? ? ? ? ?while read LINE; do
? ? ? ? ? ? ? ?STATEMENT
? ? ? ? ? ?done < /PATH/TO/SOMEFILE
? ?如:/etc/passwd中用戶shell為bash的顯示用戶的用戶名;只顯示前6個(gè)用戶;如果ID小于或等于505的則不顯示用戶;
#!/bin/bash
#
FILE=/etc/passwd
let I=0
while read LINE;do
? ? ? ?[ `echo $LINE | awk -F : '{print $3}'` -le 505 ] && continue
? ? ? ?[ `echo $LINE | awk -F : '{print $7}'` ?== '/bin/bash' ] ?&& echo $LINE | awk -F : '{print $1}' && let I++
? ? ? ?[ $I -eq 6 ] && break
done < $FILE
寫一個(gè)腳本:
1、判斷一個(gè)指定的bash腳本是否有語法錯(cuò)誤;如果有錯(cuò)誤,則提醒用戶鍵入Q或者q無視錯(cuò)誤并退出,其它任何鍵可以通過vim打開這個(gè)指定的腳本;
2、如果用戶通過vim打開編輯后保存退出時(shí)仍然,則重復(fù)第一步中的內(nèi)容;否則,就正常關(guān)閉退出;
參考答案:
#!/bin/bash
#
until bash -n $1 &> /dev/null;do
? ? ? ?read -p "Syntax Error,[Q|q] to quit,Any input for editing:" CHOICE
? ? ? ?case $CHOICE in
? ? ? ?Q|q)
? ? ? ? ? ? ? ?echo "Something wrong,quiting."
? ? ? ? ? ? ? ?exit 5;;
? ? ? ?*)
? ? ? ? ? ? ? ?vim + $1;;
? ? ? ?esac
done
。
轉(zhuǎn)載于:https://blog.51cto.com/zkhylt/1410999
總結(jié)
以上是生活随笔為你收集整理的Linux01-BASH的while流程控制41的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2014第19周六
- 下一篇: PHP __compare 魔术方法的实