执行机制: 依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环 结束 如果省略 [in
WORDS … ] ,此时使用位置参数变量 in “$@”
第一种
for 已知循环次数
for tlj(变量) 循环次数(取值列表)
do
需要循环的事件
done
第二种
for (( 表达式1; 表达式2; 表达式3 )); do 命令; done
for ((expr1;expr2;expr3))
do
command
done
expr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出
打印一列问号
#!/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
求1到10的和方法一
#/bin/bash
sum=0
for i in {1..10}
do
sum=$[sum+i]
let i++
done
echo "$sum"
累加到10方法二
#!/bin/bash
sum=0
for i in {1..100}
do
let sum=$i+$sum
#sum=$[i+sum]
#两种方法都可以
done
echo "$sum"
批量添加用户
[root@localhost opt]# vim add.sh
#!/bin/bash
ulist=$(cat /opt/user.txt)
for uname in $ulist
do
useradd $uname
echo "123123" |passwd --stdin $uname &>/dev/null
done
相对于for,需要知道循环次数 我们只知道停止条件,不知道次数,就需要使用while 直到达到条件
重复测试某个条件,只要条件成立则反复执行,当命令判断为假时停止
格式:
while [ 条件测试操作 ]
do #do代表循环的开始
判断式/命令序列
done #done代表循环的结束
猜价格小游戏
#!/bin/bash
p=`echo $[RANDOM%1000+1]`
time=0
while true
do
let time++
read -p "请输入您猜测的价格(1-1000):" h
if [ $h -eq $p ]
then
echo "恭喜您猜中了,您一共猜测了$time次"
exit
elif [ $h -gt $p ]
then
echo "您猜测的价格过高"
else
echo "您猜测的价格过低"
fi
done
累加到10方法三
#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
sum=$[i+sum]
let i++
done
echo $sum
重复测试某个条件,只要条件不成立则反复执行
格式:
until [ 条件测试操作 ]
do
判断式/命令序列
done
累加到10方法四
#!/bin/bash
sum=0
i=0
until [ $i -gt 100 ]
do
sum=$[sum+i]
let i++
done
echo "{1..100}的和:$sum"
在循环内部再使用一个循环称为嵌套循环
格式:
#!/bin/bash
for ((i=1;i<5;i++))
do
echo 此${i}为外部循环
for((j=1;j<4;j++))
do
echo -e "\t此${j}为内部循环"
done
done
当满足条件的情况下break会跳出当前循环体
#!/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
break <------跳出当前循环(内部)
fi
echo -e "\t此${j}为内部循环"
done
done
当满足条件的情况下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 ]
then
continue
fi
echo -e "\t此${j}为内部循环"
done
done