没事就要多做多练,Shell脚本循环例题做一做
Shell脚本循环例题
一、示例1
计算从1到100所有整数的和。
脚本命令
#!/bin/bash a=1 sum=0 while [ $a -le 100 ] do sum=$[$sum + $a] let a++ done echo $sum
二、示例2
提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和。
脚本命令
#!/bin/bash a=0 sum=0 read -p "请输入数字(0-100):" num if [ $num -gt 0 -a $num -lt 100 ];then while [ $num -le 100 ] && [ $a -le $num ] do sum=$[$sum + $a] let a++ done echo $sum fi
三、示例3
求从1到100所有整数的偶数和、奇数和。
脚本命令
#!/bin/bash i=0 ji=0 ou=0 for i in {1..100} do if [ $[$i % 2] -eq 0 ];then ou=$[$ou + $i] else ji=$[$ji + $i] fi let i++ done echo "奇数和为 $ji" echo "偶数和为 $ou"
四、示例4
执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码。
脚本命令
#!/bin/bash read -p "请输入你的用户名:" yonghu cat /etc/passwd | grep $yonghu &> /dev/null a=$? while [ $a -eq 0 ] do echo "该用户已存在" exit done while [ $a -ne 0 ] do useradd $yonghu read -p "请输入新用户密码:" passwd echo $passwd | passwd --stdin $yonghu exit done
五、示例5
检测指定范围主机是否通信,并将通信的主机ip输出到文件abc.txt中。
脚本命令
#!/bin/bash for i in 192.168.30.{10..20} do ping -c 3 -i 0.5 -w 2 $i &> /dev/null if [ $? -eq 0 ];then echo $i >> ~/abc.txt else echo "$i 不在线" fi done
六、示例6
用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警。
脚本命令
#!/bin/bash i=0 mm=123456 for i in 1 2 3 do read -p "请输入密码:" mima if [ $mm -eq $mima ];then echo "密码正确" exit fi done echo "错误三次,无法进入"
七、示例7
编写能够自动生成一个8位随机密码的脚本。
脚本命令
#!/bin/bash Str="abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ0123456789" for i in {1..8} do num=$[$RANDOM % ${#Str}] tmp=${Str:num:1} passwd+=$tmp done echo "随机密码为:" $passwd
八、示例8
写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
脚本命令
#!/bin/bash a=0 i=1 sum=0 while [ $a -eq 0 ] do echo "欢迎来到第 $i 家商店!" read -p "是否要进店选购?(yes/no)" en while [ $en = "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)" en done read -p "是否继续逛下一家店(yse/no)" enne if [ $enne = "yes" ];then let i++ else echo -e "谢谢惠顾!\n您一共逛了 $i 家店。\n合计购物总额为 $sum元。" exit fi done