读取不同的变量值,用来逐个执行同一组命令,经常使用在已经知道要进行多少次循环的场景。
for 变量名称(注意是名称,不是变量$等) in 名称范围
do
执行内容 #若满足循环则做什么动作
done #for循环结束标志
#!/bin/bash
for i in {1..9}
do
echo -e " ? "
done
#!/bin/bash
for j in {1..9}
do
for i in {1..9}
do
echo -e " * \c"
#\c换行
done
echo
#换行
done
#!/bin/bash
for j in {1..9}
do
for i in `seq $j`
do
echo -e "${i}x${j}=$[i*j] \t\c"
#\t tab键可以对齐
done
echo
done
#/bin/bash
sum=0
for i in {1..10..2}
do
sum=$[sum+i]
let i++
done
echo "10以内的奇数和为:$sum"
#!/bin/bash
for user in {1..10}
do
echo stu${user}|xargs -n1 useradd
echo "123123"|passwd --stdin stu${user}
done
#!/bin/bash
sum=0
for ((i=0;i<=100;i++))
do
sum=$[i+sum]
done
echo sum=$sum
#!/bin/bash
sum=0
for i in {1..100}
do
let sum=$i+$sum
#sum=$[i+sum]
#两种方法都可以
done
echo sum=$sum
for (( 表达式1 ;表达式2;表达式3 ))
do
执行内容 若满足循环则做什么动作
done for循环结束标志
表达式1:定义变量并赋值
表达式2:决定是否循环
表达式3:决定循环变量如何改变,决定循环什么时候结束
举例:
vim a.sh
脚本内容:
#!/bin/bash
for(( i=0;i<=5;i++ )) #定义for循环i变量初始值为0,循环条件i小于等于5,每循环一次i自加1
do
echo "$i" #for循环每循环一次执行一次输出$i
done #for语句结束标志
bash a.sh #调用shell执行脚本
输出结果:
0
1
2
3
4
5
用于不知道循环次数,需要主动结束循环或达到条件结束循环。
重复测试某个条件,只要条件成立则反复执行
格式:
while [ 判断条件 ]
do #do代表循环的开始
判断式/命令序列
done #done代表循环的结束
#!/bin/bash
p=`echo $[RANDOM%1000+1]`
t=0
while true
do
let t++
read -p "请输入您猜测的价格(1-1000):" h
if [ $h -eq $p ]
then
echo "恭喜您猜中了,您一共猜测了$t次"
exit
elif [ $h -gt $p ]
then
echo "您猜测的价格过高"
else
echo "您猜测的价格过低"
fi
done
#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
sum=$[i+sum]
let i++
done
echo $sum
①while [1 -eq 1] 判断条件写一个永久为真的条件
do 一直执行do内的命令
done
②while true 直接写判断条件为真
do 一直执行do内的命令
done
③while : 判断条件为冒号也表示死循环
do 一直执行do内的命令
done
重复测试某个条件,只要条件不成立则反复执行
格式:
until [ 判断条件 ]
do
判断式/命令序列
done
#!/bin/bash
sum=0
i=0
until [ $i -gt 100 ]
do
sum=$[sum+i]
let i++
done
echo "{1..100}的和:$sum"
当满足条件的情况下break会跳出当前循环体
在某个循环中遇到break直接结束此次循环,但是不影响外边嵌套的循环。
break [数字] 结束数字中的几次循环,若为2则结束自己所在循环和外边嵌套的一层循环,若为3则结束自己所在循环和外边嵌套的2层循环
举例:
vim a.sh #创建a.sh脚本
脚本内容:
#!/bin/bash
for j in {1..3} #第一层for循环,j=1,2,3各执行一次do的内容
do #第一层for循环的执行内容
for i in {1..5} #第二层for循环,i=1,2,3,4,5各执行一次do的内容
do #第二层for循环的执行内容
if [ $i -eq 3 ] #第二层for循环中添加的if判断语句,当$i=3是执行then内容
then
break #第二层for循环判断语句执行命令,break结束循环
fi #if语句结束
echo "$i" #第二层for循环语句执行每循环一次输出$i
done #第二层for循环语句结束标志
done #第一层for循环语句结束标志
bash a.sh #调用bash执行a.sh脚本
执行结果:第二层执行在$i=3是结束了循环,所以只能输出1和2,第一层for循环是循环3次,所以输出了3次。
1
2
1
2
1
2
当满足条件的情况下exit会直接退出当前脚本
#!/bin/bash
for ((i=1;i<5;i++))
do
echo 此${i}为外部循环
for((j=1;j<4;j++))
do
if [ $j -eq 3 ] <------如果j的值为3
then
exit <------结束当前脚本
fi
echo -e "\t此${j}为内部循环"
done
done
continue中止某次循环中的命令,但不会完全中止整个命令
#!/bin/bash
for ((i=1;i<5;i++))
do
echo 此${i}为外部循环
for((j=1;j<4;j++))
do
if [ $j -eq 2 ] <------如果j的值为2
then
continue <------中止循环中本次的命令,但不会完全中止整个循环或脚本
fi
echo -e "\t此${j}为内部循环"
done
done