一、循环结构
1.1 for
循环
- 列表 for 循环:
mcdx@ubuntu:~$ nl test.sh
1 sum=0
2 for i in {1..100}
3 do ((sum+=i))
4 done
5 echo $sum
mcdx@ubuntu:~$ . test.sh
5050
- 不带列表的 for 循环:
mcdx@ubuntu:~$ nl test.sh
1 sum=0
2 for i # 等同于 for i in $*
3 do ((sum+=i))
4 done
5 echo $sum
mcdx@ubuntu:~$ bash test.sh 1 2 3 4 5
15
mcdx@ubuntu:~$ bash test.sh {1..100}
5050
- 类似 C 语言风格的 for 循环:
mcdx@ubuntu:~$ nl test.sh
1 sum=0
2 for ((i=1;i<101;i++))
3 do
4 ((sum+=i))
5 done
6 echo $sum
mcdx@ubuntu:~$ . test.sh
5050
1.2 while
循环
mcdx@ubuntu:~$ nl test.sh
1 sum=0
2 n=1
3 while ((n<101)); do
4 ((sum+=n))
5 ((n++))
6 done
7 echo $sum
mcdx@ubuntu:~$ . test.sh
5050
1.3 until
循环
mcdx@ubuntu:~$ nl test.sh
1 sum=0
2 n=1
3 until [[ $n -gt 100 ]]; do
4 let sum+=n
5 let n++
6 done
7 echo $sum
mcdx@ubuntu:~$ . test.sh
5050
1.4 select
循环
mcdx@ubuntu:~$ nl a.sh
1 select player in Nash James Kobe Durant Wade Bosh
2 do echo Hello, my name is $player.; done
mcdx@ubuntu:~$ PS3='选个号:' # 设置 select 的提示符
mcdx@ubuntu:~$ . a.sh
1) Nash
2) James
3) Kobe
4) Durant
5) Wade
6) Bosh
选个号:1
Hello, my name is Nash.
选个号:2
Hello, my name is James.
选个号:6
Hello, my name is Bosh.
选个号:
1.5 嵌套循环
mcdx@ubuntu:~$ nl a.sh
1 n=3
2 while [ $n -gt 0 ]
3 do
4 echo "n 等于 $n"
5 let n--
6 for ((i=2;i>0;i--))
7 do
8 echo i 等于 $i
9 done
10 echo '-------------------'
11 done
mcdx@ubuntu:~$ . a.sh
n 等于 3
i 等于 2
i 等于 1
-------------------
n 等于 2
i 等于 2
i 等于 1
-------------------
n 等于 1
i 等于 2
i 等于 1
-------------------
二、循环控制
2.1 break
强制结束循环
可以看到 break 执行后,7 以后的数字就没有再输出了,也就是结束了循环
mcdx@ubuntu:~$ nl a.sh
1 num=1
2 while [ $num -lt 11 ]
3 do
4 echo $num
5 if [ $num = 7 ]
6 then break
7 fi
8 let num++
9 done
mcdx@ubuntu:~$ . a.sh
1
2
3
4
5
6
7
2.2 continue
略过当前循环中接下来的步骤
mcdx@ubuntu:~$ nl a.sh
1 for i in {1..100}
2 do
3 if [[ $i -gt 4 && $i -lt 97 ]]; then
4 continue
5 fi
6 echo $i
7 done
mcdx@ubuntu:~$ . a.sh
1
2
3
4
97
98
99
100
网友评论