Linux01-BASH的while流程控制41
一、循環流程控制
? ?1、循環:while, until, for
? ?2、break: 提前退出循環
? ? ? ?continue:提前結束本輪循環,而進入下一輪循環;
? ?如:計算100以內奇數的和;
#!/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以內的正整數相加,當和大于5000時退出循環;
#!/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
? ?如:判斷輸入內容是否為文件,當觸發quit時退出;
#!/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個用戶;如果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
寫一個腳本:
1、判斷一個指定的bash腳本是否有語法錯誤;如果有錯誤,則提醒用戶鍵入Q或者q無視錯誤并退出,其它任何鍵可以通過vim打開這個指定的腳本;
2、如果用戶通過vim打開編輯后保存退出時仍然,則重復第一步中的內容;否則,就正常關閉退出;
參考答案:
#!/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
。
轉載于:https://blog.51cto.com/zkhylt/1410999
總結
以上是生活随笔為你收集整理的Linux01-BASH的while流程控制41的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2014第19周六
- 下一篇: Linux/Centos服务器安装por