shell循环语句
1.for循环
格式
语法:for 变量名 in 变量取值列表 ;do
重复执行的命令(循环体),应用到变量名
done
作用
- 读取不同的变量值,用来逐个执行同一组命令
- for循环经常使用在已经知道要进行多少次循环的场景
语法
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
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
4.until循环
**概述:**不满足条件的时候要一直循环时使用
格式:
until 条件测试操作
do
命令序列
done
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
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
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
~