目录

一、循环语句

1)for循环语句

示例:

continue命令

break命令

2)while循环语句

​编辑

示例:

3)untli循环语句


一、循环语句

1)for循环语句

  • 读取不同的变量值,用来逐个执行同一组命令
#类C语言格式
  for  ((i=0;i<=5;i++));do
    echo "$i"
  done

#一般格式
  for i in {1..5}; do
    echo "$1"
  done

  for ((;;))   #死循环

Shell编程之循环语句-LMLPHP

示例:

1.批量添加用户 

  • 用户名存放在users.txt文件中,每行一个
  • 初始密码均为123456
  • 验证脚本
for i in $(cat /opt/user.txt);do
  useradd $i
  echo 123456 | passwd --stdin $i
done

Shell编程之循环语句-LMLPHP

2.根据IP地址检查主机状态

  • IP地址存放在ipadds.txt文件中,每行一个
  • 使用ping命令检测各主机的连通性
  • ping通的IP地址放到/opt/hosts文件中
for i in $(cat /root/ipaddr1.txt);do
  ping -c 3 -W 2 $i &> /dev/null
  if [ $? -eq 0 ];then
     echo $i >> /opt/hosts
  else
     echo "false"
  fi
done

Shell编程之循环语句-LMLPHP

3.数字累加脚本(1-100)

sum=0
for i in {1..100};do 
  sum=$(($i+$sum))
done
echo "$sum"

Shell编程之循环语句-LMLPHP

4.循环打印9*9乘法表

for i in {1..9};do
  for ((j=1;j<=i;j++));do
    echo -ne "$i*$j=$(($i*$j))\t"
  done
echo
done

Shell编程之循环语句-LMLPHP

5.利用for循环将多个文本文件内容合并为一个文件

for file in /opt/*.txt;do
  cat "$file" >> ky28.txt
done

continue命令

continue用于停止本次循环,不再执行后续命令,直接进入下一轮循环,并非将整个循环体终止

for (( i = 1; i < 11; i++ ));do
  if [ $i -eq 4 ] || [ $i -eq 7 ]
  then
    continue
  fi
  echo "Iteration number: $i"
done

#运行结果为输出 1 2 3 5 6 8 9 10
bash t1.sh
Iteration number: 1
Iteration number: 2
Iteration number: 3
Iteration number: 5
Iteration number: 6
Iteration number: 8
Iteration number: 9
Iteration number: 10
for i in {1..3};do
  echo $i
  for j in {1..5};do
    if [ $j -eq 2 ];then
      continue 2          #停止两级的本次循环
    fi
    echo $j
  done
done

#运行结果为输出 11 21 31
11
21
31

break命令

break命令用于跳出当前命令所在的循环体,也即直接终止了整个循环命令

for (( i = 1; i < 11; i++ ));do
 if [ $i -eq 4 ] || [ $i -eq 7 ]
 then
   break
 fi
 echo "Iteration number: $i"
done

#运行结果输出为 1 2 3
bash t2.sh
Iteration number: 1
Iteration number: 2
Iteration number: 3
for i in {1..3};do
  echo $i
  for j in {1..5};do
    if [ $j -eq 2 ];then
      break 2             #终止两级循环
    fi
    echo $j
  done
done

#运行结果输出为11
11

2)while循环语句

  • 重复测试某个条件,只要条件成立则反复执行
# While循环语句与for循环功能类似,主要用于对某个数据域进行循环读取、对文件进行遍历,通常用于需要循环某个文件或者列表,满足循环条件会一直循环,不满足则退出循环,其语法格式以while…do开头,done结尾与 
while [ $i -le 5 ];do
  echo "$i"
  let i++
done

#运行结果输出为
0
1
2
3
4

Shell编程之循环语句-LMLPHP

示例:

1.系统随机生成一个0~100的数,进行猜数字游戏,由用户进行输入

输入数大于随机数,会提示猜大了

输入数小于随机数,会提示猜小了

直到正确猜出才会退出,并且输出一共猜了几次

a=$[RANDOM%100+1]
time=0
while ture;do
  let time++
  read -p "输入一个数字:" num
  if [ $num -eq $a ];then
    echo "您猜对了,一共猜了${time}次"
    break
  elid [ $num -gt $a ];then
    echo "您猜大了!"
  else
    echo “您猜小了”
  fi
done

2.输入一个网段,对该网段的1..254IP进行ping命令,并判断是否连通,成功则将IP放入/opt/hosts.txt

read -p “请输入一个网段(xxx.xxx.xxx.):” ip
for i in {1..254};do
{
  ping -c 3 -W 2 ${ip}${i} &> /dev/null
  if [ $? -eq 0 ];then
    echo "${ip}${i} is online!"
    echo ${ip}${i} >> /opt/hosts.txt
  else
    echo "${ip}${i} is offline!"
  fi
}$                                           #快速并行结构执行
done

3.购物

逛淘宝选购商品

每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元)

每次选购完成或不买都会提示用户是否继续逛下一家商店

如果不再继续逛的话进行购物车结算总额

sum=0
while true ;do
  read -p "clothes/trousers/shoe/hat/socks/quit:" a
  case $a in
  clothes)
  let sum+=500
  ;;
  trousers)
  let sum+=400
  ;;
  shoe)
  let sum+=350
  ;;
  hat)
  let sum+=150
  ;;
  socks)
  let sum+=50
  ;;
  quit)
  echo "$sum¥"
  break
  ;;
  *)
  ;;
  esac
  read -p "return? Y/N:" b
  if [[ $b == N ]];then
     echo "$sum¥"
     break
  fi
done

3)untli循环语句

until 语句,它与 while 不同之处在于,是当条件表达式为 false 时才循环,实际使用中比较少,这里不再讲解。
until [ $i -gt 10 ];do
  echo $i
  let i++
  sum=$(($sum+$i))
done
05-04 05:51