步进循环语句for
1.带列表的f o r forfor循环语句
基本语法:
for variable in {list}
do
statement1
statement2
..
done
例1:使用带列表的f o r forfor语句
#! /bin/bash
for var in 1 2 3 4 5 6 7 8
do
echo "the number is $var"
done
执行结果:
可以将上述代码进行改造,得到同样的效果:
#! /bin/bash
for var in {1..8}
do
echo "the number is $var"
done
例2:指定f o r forfor语句的步长
基本语法:
for variable in {start..end..step}
do
statement1
statement2
..
done
使用该语法:
#! /bin/bash
sum=0;
for i in {1..100..2}
do
let "sum+=i"
done
echo "the sum is $sum"
执行结果:
例3:使用l s lsls命令的输出结果作为f o r forfor循环的执行条件
#! /bin/bash
#${ls}可换成*,代表ls *
for file in $(ls)
do
echo "$file"
done
执行结果:
例4:使用f o r forfor循环逐个处理脚本的参数
#! /bin/bash
echo "$*"
for arg in $*
do
echo "${arg}"
done
执行结果:
2.不带列表的for循环语句
基本语法:
for variable
do
statement1
statement2
..
done
例5:使用不带列表的f o r forfor循环语句
#! /bin/bash
for arg
do
echo "$arg"
done
执行结果:
3.类C风格的for循环语句
基本语法:
for ((expression1;expression2;expression3))
do
statement1
statement2
..
done
例6:使用上述语法
#! /bin/bash
for (( i=1; i<5; i++))
do
echo "$i"
done
执行结果:
省略条件的死循环:
for ((;;))
4.使用for循环语句处理数组
基本语法:
for variable in ${array[*]}
do
statement1
statement2
..
done
例7:处理数组
#! /bin/bash
array=(Monday Tuesday Wednesday Thursday Friday Saturday Sunday)
for day in ${array[*]}
do
echo $day
done
执行结果:
until循环语句
1.until语句的基本语法
until expression
do
statement1
statement2
..
done
当e x p r e s s i o n expressionexpression表达式的值不为0时,将执行d o dodo和d o n e donedone之间的语句;当e x p r e s s i o n expressionexpression表达式的值为0时,将退出u n t i l untiluntil循环结构,继续执行d o n e donedone语句后面的其它语句
例8:使用u n t i l untiluntil语句
#! /bin/bash
i=1
#当i的值小于9时执行循环
#注意此处两个中括号不能分隔
until [[ "$i" -gt 9 ]]
do
let "square=i*i"
echo "$i*$i=$square"
let "i=i+1"
done
执行结果:
2.利用until语句批量增加用户
例9:批量增加用户
#! /bin/bash
i=1
until [ "$i" -eq 21 ]
do
#执行useradd命令添加用户
useradd user$i
#修改用户密码
echo "password" | passwd --stdin user$i > /dev/null
#ubuntu下更改成echo "user$i":"password" | chpasswd
let "i++"
done
执行结果:
例10:批量删除用户:
#! /bin/bash
i=1
until [ "$i" -eq 21 ]
do
userdel -r user$i
let "i++"
done
while循环语句
1.while语句的基本语法
基本语法:
while expression
do
statement1
statement2
..
done
当e x p r e s s i o n expressionexpression表达式的值为0时,执行循环内的语句;否则退出w h i l e whilewhile循环
例11:使用w h i l e whilewhile循环来输出数字1~9的平方
#! /bin/bash
i=1
while [ "$i" -lt 10 ]
do
let "square=i*i"
echo "$i*$i=$square"
let "i=i+1"
done
执行结果:
通过break语句跳出指定的层数
例12:给b r e a k breakbreak一个参数使其跳出指定的层数
#! /bin/bash
for (( i=1; i<=9; i++ ))
do
for (( j=1; j<=i; j++ ))
do
let "product=i*j"
printf "$i*$j=$product"
if [[ "product" -gt 9 ]]
then
printf " ”
else
printf " "
fi
if [[ "$j" -eq 5 ]]
then
break 2
fi
done
echo
done
执行结果:
乘法表的最后一行与命令提示符位于同一行,这是因为满足j = 5 j=5j=5后执行b r e a k breakbreak语句,跳过两行【跳过e c h o echoecho】,因此同行
含参数的continue语句
例13:使用含参数的c o n t i n u e continuecontinue语句
#! /bin/bash
for i in a b c d
do
echo -n "$i "
for j in `seq 10`
do
if [ $j -eq 5 ]
then
continue 2
fi
echo -n "$j"
done
echo
done
执行结果:
当内层循环到第5次时,变量j jj的值为5,执行c o n t i n u e continuecontinue 2语句,跳过外层的e c h o echoecho