一循环语句
1.1 带列表的for循环语句shell
for variable in{list}express
do数组
statement1bash
done命令行
(list为一个列表,for循环的执行次数与list中元数个数相关,shell将in关键字后面的list列表的第一个元素值赋给变量variabel,而后执行循环体,list元素都被访问完后,程序执行done语句后面的其余语句。)字符串
例子:it
#! /bin/bashio
#for循环开始for循环
for var in 1 2 3 45 6 7 8变量
do
#依次输出列表中的数字
echo "the number is $var"
done
结果:
the number is 1
the number is 2
the number is 3
the number is 4
the number is 5
the number is 6
the number is 7
the number is 8
另外,shell容许指定for语句的步长,基本语法为:
for variable in{start..end..step}
用字符串做为元素,可省略外面的大括号,如:
for day in mon tuewed thu
能够用ls命令的输出结果做为for循环的执行条件。如:
#! /bin/bash
#使用ls命令的执行结果做为列表
for file in $(ls)
do
#输出每一个文件名
echo "$file"
done
($()的做用就是讲其中的字符串做为命令执行,可用`ls`替代。)
上面例子能够等价于
#! /bin/bash
#使用通配符做为列表条件,列出当前目录全部文件
for file in *
do
echo "$file"
done
列表for循环另外一个比较重要的用途是处理脚本参数。可经过$*一次获取全部参数。用户能够经过将该系统变量获取的参数值做为for循环的条件列表。从而一次处理各个参数。
例子
#!/bin/bash
#输出全部的参数
echo"$*"
#将参数列表做为条件
for arg in $*
do
#依次输出各个参数值
echo "${arg}"
done
执行:./ex5.sh a b c d
结果:a b c d
a
b
c
d
1.2 不带列表的for循环
for variable
do
statement1
done
(没有条件列表,shell从命令行获取条件列表)
等价于
for variable in $@
do
statement1
done
($@也是获取全部参数)
等价于
for variable in $*
do
statement1
done
例子:
#! /bin/bash
#! /bin/bash
#不带条件列表
for arg
do
#输出每一个参数
echo "$arg"
done
for语句处理数组
for variable in${array[*]}
1.3 until语句
until expression
do
statement1
done
(expression不为0执行statement1,执行完后继续判断expression,不为0,继续执行,为0则退出)
用until批量增长用户:
#! /bin/bash
#定义变量i
i=1
#一直循环到变量i的值为21
until ["$i" -eq 21 ]
do
#执行useradd命令添加用户
useradd user$i
#修改用户密码
echo "password" | passwd --stdinuser$i > /dev/null
#循环变量自增
let "i++"
done
until循环删除系统用户:
#! /bin/bash
i=1
until ["$i" -eq 21 ]
do
#依次删除用户
userdel -r user$i
let "i++"
done
1.4 whlie循环语句
while expression
do
statement1
done
(expression 为0执行循环体(即为真执行))
例子:
#! /bin/bash
#定义循环变量
i=1
#while循环开始
while [["$i" -lt 10 ]] //小于10,为真,即0,执行循环体
do
#计算平方
let "square=i*i"
#输出平方
echo "$i*$i=$square"
#循环变量自增
let "i=i+1"
done
用户可在程序中设置一个特殊的标记值,当该标记值出现时,终止while循环。
例子:
#! /bin/bash
#提示用户输入数字
echo "Pleaseenter a number between 1 and 10.Enter 0 to exit."
#读取用户输入的数字
read var
#while循环开始
while [["$var" != 0 ]]
do
#提示用户输入数字过小
if [ "$var" -lt 5 ]
then
echo "Too small. Try again."
read var
#提示用户输入数字太大
elif [ "$var" -gt 5 ]
then
echo "Too big. Try again."
read var;
else
echo "Congratulation! You areright."
exit 0;
fi
(上面变量var是结束标记,为0或5时,退出循环)
1.5 嵌套循环:
例子1:九九乘法表:
#! /bin/bash
#外层循环
for((i=1;i<=9;i++))
do
#内层循环
for ((j=1;j<=i;j++))
do
#计算2个数的乘积
let "product=i*j"
#输出乘积
printf "$i*$j=$product"
#输出空格分隔符
if [[ "$product" -gt 9 ]]
then
printf " "
else
printf " "
fi
done
echo
done
1.6 break语句控制循环
break当即跳出某个循环,执行循环体后面的语句。
默认状况下,break退出一层循环,可在后面增长一个数字做为参数,指定要退出的循环参数。如:break2退出两层循环。
1.7 continue语句控制循环
continue跳过当前循环体中该语句后面的语句,从新从循环语句开始的位置执行。
例子:
#! /bin/bash
for var in {1..10}
do
#若是当前数字为奇数,从新循环
if [[ "$var%2" -eq 1 ]]
then
#跳事后面的语句
continue
fi
echo "$var"
done
结果:输出10之内的偶数
注意:continue与break的本质区别是continue没有跳出循环结构