shell指令碼例題—for、while和until迴圈
阿新 • • 發佈:2021-07-16
目錄
一、例題1
1.1 需求
計算從1到100所有整數的和
1.2 指令碼命令
sum=0 for ((i=1;i<=100;i++)) do sum=$[$sum + $i] done echo $sum
1.3 驗證操作
二、例題2
2.1 需求
提示使用者輸入一個小於100的整數,並計算從1到該數之間所有整數的和
2.2 指令碼命令
read -p "請輸入一個整數(1-100):" num
if [ $num -ge 1 -a $num -lt 100 ];then
sum=0
for ((i=1;i<=$num;i++))
do
sum=$[$sum + $i]
done
echo "整數和為$sum"
else
echo "輸入錯誤,請重新輸入數字(1-100)"
fi
2.3 驗證操作
三、例題3
3.1 需求
求從1到100所有整數的偶數和、奇數和
3.2 指令碼命令
a=0
for ((i=1;i<=100;i+=2))
do
a=$[$a + $i]
done
echo "1-100內所有奇數和為$a"
b=0
for ((i=0;i<=100;i+=2))
do
b=$[$b + $i]
done
echo "1-100內所有偶數和為$b"
3.3 驗證操作
四、例題4
4.1 需求
執行指令碼輸入使用者名稱,若該使用者存在,輸出提示該使用者已存在;若該使用者不存在,提示使用者輸入密碼,建立使用者並設立其密碼
4.2 指令碼命令
第一種方法: for i in `cat /etc/shadow | awk -F ':' '{print $1}'` do read -p "輸入使用者名稱:" name if [ $name = $i ];then echo "${name}使用者已存在" exit else useradd $name a=`echo $?` if [ $a -eq 0 ];then echo "該使用者不存在,將會建立該使用者並且將會輸入密碼" read -p "輸入密碼:" mima echo $mima | passwd --stdin $name exit else exit fi fi done 第二種方法: read -p "輸入使用者名稱:" name `useradd $name` &> /dev/null a=`echo $?` while [ $a -ne 0 ] do echo "使用者已存在" exit done while [ $a -eq 0 ] do echo "該使用者不存在,將會被建立" read -p "輸入密碼:" mima echo $mima | passwd --stdin $name exit done
4.3 驗證操作
五、例題5
5.1 需求
檢測指定範圍主機是否通訊,並將通訊的主機ip輸出到檔案host_ip中
5.2 指令碼命令
for ((a=1;a<=10;a++))
do
ping -c 2 -i 0.5 -w 2 192.168.80.$a &> /dev/null
if [ $? -eq 0 ];then
echo "192.168.80.${a} is online" >> host_ip
else
echo "192.168.80.${a} is offline" >> /dev/null
fi
done
注:這邊我們用的for迴圈,採用遍歷的方式,序列用時太長,我們可以運用多執行緒並行的方式來ping主機IP來縮短時間,具體命令如下:
5.3 操作驗證
六、例題6
6.1 需求
使用者輸入密碼,指令碼判斷密碼是否正確,輸入正確提示正確資訊,連續輸錯3次則報警
6.2 指令碼命令
passwd=123456
for ((i=1;i<=3;i++))
do
read -p "輸入你的密碼:" mima
if [ $mima = $passwd ];then
echo "密碼正確,請進"
exit
else
echo "密碼錯誤,想想再輸哦"
fi
done
echo "警告,密碼錯3次"
6.3 驗證操作
七、例題7
7.1 需求
編寫能夠自動生成一個8位隨機密碼的指令碼
7.2 指令碼命令
補:1.num=$[$RANDOM % ${#Str}] 中 ${#Str}代表字元長度,可以用具體數字來代替,多少位數就輸多少 2.tmp=${Str:num:1}擷取字元命令,其中Str指隨機字串;num指從第幾位擷取;1指擷取的步長 3.+=疊加命令 |
7.3 驗證操作
八、例題8
8.1 需求
寫個逛淘寶選購商品指令碼,每家商店有五種商品選購(衣服500元,褲子400元,鞋子350元,帽子150元,襪子50元),每次選購完或不買都會提示使用者是否繼續逛下一家商店,如果不再繼續逛的話進行購物車結算總額
8.2 指令碼命令
a=0
i=1
sum=0
while [ $a -eq 0 ]
do
echo "歡迎來到第 $i 家商店"
read -p "是否進店選購(yes/no):" doing
while [ $doing = "yes" ]
do
echo "1:衣服¥500"
echo "2:褲子¥400"
echo "3:鞋子¥350"
echo "4:帽子¥150"
echo "5:襪子¥50"
echo "6或其他:放棄選購"
read -p "選擇你需要的商品序號:" num
case $num in
1)
echo "選購衣服成功"
sum=$[$sum + 500]
;;
2)
echo "選購褲子成功"
sum=$[$sum + 400]
;;
3)
echo "選購鞋子成功"
sum=$[$sum + 350]
;;
4)
echo "選購帽子成功"
sum=$[$sum + 150]
;;
5)
echo "選購襪子成功"
sum=$[$sum + 50]
;;
*)
echo "放棄購買"
esac
read -p "是否再繼續選購(yes/no):" doing
done
read -p "是否繼續逛下一家商店(yes/no):" going
if [ $going = "yes" ];then
let i++
else
echo -e "謝謝惠顧!\n你一共逛了 $i 個商店.\n合計消費總額為 $sum 元"
exit
fi
done
8.3 驗證操作
九、例題9
9.1 需求
輸出環境變數PATH所包含的所有目錄以及其中的子目錄和所有可執行檔案
9.2 指令碼命令
9.3 驗證操作