while 循环创建用户
i=1 while [ $i -le 10 ] do useradd user${i} echo "123456" | passwd --stdin user${i} &> /dev/null let i++ done
猜测价格
[root@xue opt]# cat caijia.sh price=$[RANDOM%100+1] #0-32767 i=0 while true do read -p "input the price" exp let i++ if [[ $exp -gt $price ]] then echo '高了!' elif [[ $exp -lt $price ]] then echo '低了!' else echo '猜对了' break fi done echo "你猜了$i 次"
网段持续检测
read -p "请输入一个网段(such like 192.168.80)" wangduan for zhuji in {1..254} do ping -c 3 -W 2 ${wangduan}.${zhuji} &> /dev/null if [ $? -eq 0 ] then echo "${wangduan}.${zhuji} is online!!!" echo ${wangduan}.${zhuji} >> /opt/serviceip.txt else echo "${wangduan}.${zhuji} is offline" fi done
完善代码,添加 { }& 并发。
由于ping需要时间,一个个ping耗时太长,使用 { }& 包裹ping语句,使其并发执行
read -p "请输入一个网段(such like 192.168.80)" wangduan for zhuji in {1..254} do { #✨ ping -c 3 -W 2 ${wangduan}.${zhuji} &> /dev/null if [ $? -eq 0 ] then echo "${wangduan}.${zhuji} is online!!!" echo ${wangduan}.${zhuji} >> /opt/serviceip.txt else echo "${wangduan}.${zhuji} is offline" fi }& #✨ done
多文件合并到一个文件
for sb in /opt/*.sh #for循环查找文件 do cat "$sb" >> hebing.txt #内容重定向到文本文件 done
显示文件夹所有文件 (在生产环境中不允许使用ll,ls命令。可以通过shell脚本获取)
for sb in * do echo "$sb" done
改进,排除文件夹
for sb in * do test -f $sb #是否为文件 (排除目录) if [ $? -wq 0 ] then echo "$sb" fi done ~
shell计算器
while true == for ((;;)) #都可以死循环
while true do read -p '输入数字1 ' num1 read -p '选择加减乘除+—x/ ' jjcc read -p '输入数字2 ' num2 if [ $jjcc == '+' ] then echo $(($num1+$num2)) fi if [ $jjcc == '-' ] then echo $(($num1-$num2)) fi if [ $jjcc == 'x' ] then echo $(($num1*$num2)) fi if [ $jjcc == '/' ] then echo $(($num1/$num2)) fi echo done
优化版代码
使用[[ ]]
变量全部加上" "
符合语言规范
while true do read -p "请输入第一个整数:" num1 read -p "请输入运算符:加(+);减(-);乘(*);除(/);求余(%):" fh read -p "请输入第二个整数:" num2 if [[ "$fh" == "+" ]] then echo "结果为:$(($num1 + $num2))" elif [[ "$fh" == "-" ]] then echo "结果为:$(($num1 - $num2))" elif [[ "$fh" == "*" ]] then echo "结果为:$(($num1 * $num2))" elif [[ "$fh" == "/" ]] then echo "结果为:$(($num1 / $num2))" elif [[ "$fh" == "%" ]] then echo "结果为:$(($num1 % $num2))" else echo "输入有误!" fi done
商店选购
选择是否进入商店。进入商店则选购产品。不进入商店则结算。显示花费了多少资金。
[root@xue opt]# cat shop.sh sum=0 count=0 while true do read -p "是否进入商店?y/n " enter if [ $enter == "y" ] then let count++ read -p "输入商品数字 1.衣服500 2.裤子400 3.鞋子350 4.帽子150 5.袜子50 " sp case $sp in 1) let sum+=500 ;; 2) let sum+=400 ;; 3) let sum+=350 ;; 4) let sum+=150 ;; 5) let sum+=50 ;; *) break esac else break fi done echo "共进入商店$count 次 ,共消费$sum 元"
小技巧seq命令
seq 1 2 10 #从1开始,每隔2,输出直到10 seq 2 3 10 #从2开始,每隔3,输出直到10