for 循環是相對比較簡單的循環,任何一個循環里面都可以嵌套循環,用for可以解決簡單邏輯上的任何循環
。
有兩種基本格式:for i in " ";do
或者dor((i=0;i<=9;i++))可以嵌套if或者while等循環
if循環。最重要的是判斷的條件,if意為如果什么就怎樣怎樣,所以這里if條件判斷經常出錯就是在這,這里我就不對中括號,小括號用法再一一贅述了,之前說過。
while,當型循環,表述起來比for復雜一點,因為for有簡化版條件,while只能在循環體里進行變量加減操作。
until循環,直到什么才怎樣怎樣,是。while的反例。非常擅長執行定時任務,所以說每個任務都各有所長,關鍵就在于使用的時候互相配合使用,達到既簡化操作又完成目的的目標。
用until 解決
1、每隔3秒鐘到系統上獲取已經登錄的用戶的信息;如果發現用戶hacker登錄,則將登錄時間和主機記錄于日志/var/log/login.log中,并提示該用戶退出系統。
username=`uptime | cut -d"," -f2 | grep -o "hacker"`
until [ -n $username ] ;do uptime sleep3;done
2、隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出
read -p "please input your number" n
declare -i a=(($RANDOM%10))
until [ $n -eq $a ];do
[ $n -gt $a ] && echo "you win" || echo "you lose"
done
exit 1
3、編寫腳本,求100以內所有正整數之和
sum=0
i=1
until $i>100;do
((sum=sum+i))
((i++))
done
echo sum is $sum.
4、編寫腳本,通過ping命令探測172.16.250.1-254范圍內的所有主機的在線狀態,統計在線主機和離線主機各多少。
ip=172.16.250.
i=1
a=0
until $i>254;do
ping -W1 -c2 $ip$i &> /dev/null && (echo "the host is on" let a=a+1)|| echo "the host is off"
done
echo "the online host is $a"
echo "the halt host is $((254-$a))'
5、編寫腳本,打印九九乘法表
i=1
j=1
until $i>9;do
until $j>$i;do
echo $i*$j=$(($i*$j))
done
echo
6、編寫腳本,利用變量RANDOM生成10個隨機數字,輸出這個10數字,并顯示其中的最大者和最小者
利用數組來做
declare -a ran
declare -i max=0
declare -i min=11
for((j=0;j<=9;j++)) ;do
ran[$j]=$((RANDOM%10))
echo "${ran[$j]}"
[ ${ran[$j]} -le $min ] && min=${ran[$j]}
[ ${ran[$j]} -ge $max ] && max=${ran[$j]}
done
echo MAX:$max
echo MIN:$min
利用until
7、編寫腳本,實現打印國際象棋棋盤
read -p "please input your number"n
i=1
j=1
until $i>$n;do
until $j>$n;do
[ $((($i+$j)%2)) -eq 0 ] && echo -en "\033[47m \033[0m" || echo -en "\033[41m \033[0m"
done
echo
done
8、打印等腰三角形
read -p "please input your number" n
i=1
until (($i>$n));do
echo""
原創文章,作者:sjfbjs,如若轉載,請注明出處:http://www.www58058.com/37400