shell循环语句(for,while,until的用法)

275 阅读2分钟

shell循环语句

1.for循环

格式

语法:for 变量名 in 变量取值列表 ;do
		重复执行的命令(循环体),应用到变量名
	  done

作用

  • 读取不同的变量值,用来逐个执行同一组命令
  • for循环经常使用在已经知道要进行多少次循环的场景

image-20220410225500457

语法

for  变量名  in  取值列表
do
	命令序列
done

实例

1.循环打印0-10的整数

方法1 #通过通配符的方式来表示1..10
#!/bin/bash

for i in {1..10}
 do
  echo $i
 done

方法2  使用seq
#!/bin/bash

for i in $(seq 1 10)
 do
  echo $i
 done

方法3 通过运算符实现(())=let
#!/bin/bash

for ((i=1; i<=10; i++))  ##直接定义变量的值((i的值; i的范围; 每次循环i+1))
 do
  echo $i
 done

2.使用for语法打印所有奇数

方法1
#!/bin/bash

for i in {1..10..2}
 do
  echo $i
 done
 
方法2 使用seq
#!/bin/bash

for i in $(seq 1 2 10)
 do
  echo $i
 done

方法3  通过运算符实现
#!/bin/bash

for ((i=1; i<=10; i+=2)) #直接定义i的自身数值,范围和每次自增加的值
 do
  echo $i
 done


3.批量添加用户

2.字符串分割

表达式:${i:n:m}

  • i是变量名

  • n表示开始取值的下表,从0,开始算起

  • m为取值长度

实例:

3.while语句

概述:重复测试某个条件,只要满足条件,就重复执行命令,条件不成立,立即退出,自带判断;

,不知道循环次数时使用死循环可以配合退出语句(break,exit,continue)实现循环操作

格式

语法

while 条件测试操作 ;do

​		重复执行的命令

​	 done

image-20220414101833165

while语句应用实例

1批量添加用户

  • 用户名称以stu开头,按照数字进行排序
  • 一共添加20个用户,即stu1,stu2,........,stu20
  • 初始密码设为123456
#!/bin/bash

i=1
#定义i的值为1

whlie [ $i -le 20 ]
#使用whlie死循环,范围为小于或等于20
do
  useradd stu$i
#调用变量i,新建用户stu1...stu20
  echo 123456 | passwd --stdin stu$i
#设置stu1到stu20的密码标准输出到passwd文件
  let i++
#i每循环一个自加1,实现变量迭代的过程,不然while循环会进入死循环

done


实例2

猜商品价格

  • 通过变量RANDOM获得随机数
  • 提示用户猜测并记录记录次数,猜中后推出循环
#!/bin/bash


res=$[RANDOM % 1000]
#取RANDOM随机数0-999
a=0
#定义a的变量
while [$a -eq 0]

read -p "请输入您猜的价格(0-999)"price
#read-p定义变量价格,也就是用户猜的值
do
  if [ $price -eq $res ];then
    echo "恭喜您,才对了"
  let a++
#因为whlie满足条件都会一直执行,用户在才对了时候就+1,自动推出循环,下面两种猜错的情况就不用加了,输入错误一直循环
  elif [ $price -lt $res ];then
    echo "猜低了,请继续猜!"
  elif { $price -gt $res ];then
    echo "猜高了,请继续猜"
  fi

image-20220413100838572

4.until循环

**概述:**不满足条件的时候要一直循环时使用

格式:

until 条件测试操作
do
 命令序列
done

image-20220414102230257

until循环语句实例

实例1:

计算1~50的和值

  • 通过循环累加的方式计算
[root@localhost ~]# vim suanshu233.sh
#!/bin/bash


a=0
#定义a的循环值为0
sum=0
#定义一个相加的值为sum

until [ $a -gt 50 ] 
#使用until语句,循环条件i<=50
do
  sum=$[sum + a]
#每个值相加的和
  let a++
#添加迭代的过程,不然一直会进行死循环
done

echo $sum

image-20220413103703386

5.双层循环

exit ,break,continue的应用

  • exit 跳出当前脚本,exit执行后,脚本后面的语句都不会执行

  • break 跳出单层循环,breck 2 跳出两层循环循环内的break后面的语句不会执行,但是循环外的语句仍然会执行

  • continue 终止某次循环的执行,但不会完全终止,(while until 循环中使用需要慎重,因为如果continue放在变量迭代语句前会造成死循环

实例

1.99 for双重循环写出99乘法表

#!/bin/bash
#使用双重循环
for ((a=1;a<=9;a++))
#外层循环定义行
do
  for ((b=1;b<=a;b++))
#内层循环定义列
  do
    let sum=a*b
#计算a*b的值
    echo -ne "$a*$b=$sum\t"
##-n换行且光标移至行首  -e让echo命令支持制表符   $sum\t加上\t为制表符输出

   done
   echo ""
##实现换行

done

image-20220414022153627

2 使用while双重循环写出99乘法表

#!/bin/bash
a=1
while [ $a -le 9 ]
do

   b=1
   while [ $b -le $a ]
   do
   let sum=a*b
     echo -ne "$a*$b=$sum\t"
   let b++
 done

echo ""
let  a++
done
~

image-20220414023709460