shell脚本例题—for、while和until循环

时间:2021-07-16
本文章向大家介绍shell脚本例题—for、while和until循环,主要包括shell脚本例题—for、while和until循环使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、例题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 验证操作



原文地址:https://www.cnblogs.com/guxd/p/15018955.html