文章目录
shell的三种循环及循环控制符
#shell的三种循环
for循环,while循环,until循环
#shell的循环控制符
break,continue
#for循环的三种结构
列表
不带列表
类C风格
简单的单行for循环
root@ser552965470679:~# for fruit in apple orange banana; do echo $fruit; done
apple
orange
banana
列表for循环
(do和done之间的叫着循环体)
for variable in {list}
do
command1
command2
done
#使用列表for循环显示5次欢迎(这里的1,2,3,4,5可以是数字,也可以是字符串,但是得用空格分开)
for variable in 1 2 3 4 5 #也可以使用省略的计数方式,这样写 for variable in {1..5}
do
echo "欢迎 $variable"
done
shell中还支持按一定的步数进行跳跃式实现列表for
for variable in {1..100..2} #计算1到100所有奇数之和,也可以这样写 for variable $( seq 1 2 100 )
do
let "a+=variable"
done
echo "$a"
使用列表for循环显示当前目录下的文件,将ls命令的结果列表赋值给file
for file in $( ls )
do
echo "file : $file"
done
[root@localhost ~]# sh ceshi.sh
file : 1
file : 4564
file : 56
file : anaconda-ks.cfg
file : asd
file : ceshi.sh
file : ss
使用列表for循环显示所有的输入参数
echo "共输入了$#个参数"
for canshu in "$*"
do
echo "$canshu"
done
不带列表的for循环
(默认会将脚本输入的参数,按列表传给for循环)(使用较少)
for variable #等价于 for variable "$@"
do
command
done
类C风格的for循环
(也叫着计次循环,一般用于循环次数已知的情况)
for (( expr1; expr2; expr3 ))
#其中表达式expr1为循环变量赋初值的语句
#表达式expr2,决定是否进行循环的表达式,当判断expr2的退出状态为0时,执行do和done之间的循环体
#表达式expr3,是用于改变循环变量的语句
do
command
done
例子1
使用类C风格的for循环计算1到100的奇数之和
for (( i=1; i<=100; i=i+2 ))
do
let "a+=i"
done
echo "$a"
例子2
LIN=5
for (( a=1,b=9; a<=LIN; a++,b-- ))
do
let "temp=a-b"
echo "$a-$b=$temp"
done
注意:下面全部省略表达式也是合法的
for (( ; ; ))
do
command
done
for循环嵌套(在一个循环体内包含其他循环)
嵌套循环示例一:
#!/bin/bash
outer=1 # 设置外部循环计数.
# 开始外部循环.
for a in 1 2 3 4 5
do
echo "Pass $outer in outer loop."
echo "---------------------"
inner=1 # 重置内部循环计数.
# ===============================================
# 开始内部循环.
for b in 1 2 3 4 5
do
echo "Pass $inner in inner loop."
let "inner+=1" # 增加内部循环计数.
done
# 内部循环结束.
# ===============================================
let "outer+=1" # 增加外部循环的计数.
echo # 每次外部循环之间的间隔.
done
# 外部循环结束.
exit 0
嵌套循环示例二:实现九九乘法表
for (( i=1; i<=9; i++ ))
do
for (( j=1; j<=i; j++ ))
do
let "he=i*j"
echo -n "$i*$j=$he "
done
echo ""
done
[root@localhost ~]# sh ceshi.sh
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
嵌套循环示例三:实现8*8的围棋棋盘
for (( i=1; i<=9; i++ ))
do
for (( j=1; j<=8; j++ ))
do
let "x=i+j"
let "tmp=x%2"
if [ "$tmp -eq 0" ];then
echo -ne "\033[47m"
else
echo -ne "\033[40m"
fi
done
echo ""
done
#在这里无法展示效果,可以参考棋盘的样子,一个白一个黑
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论