在上一篇文章中添加了 Bash
脚本中的基本语法已经逻辑判断 if
if-else
if-elif-else
,在本章节中你将学习到 Bash
中的循环逻辑,包括:
for
while
until
- 使用
continue
break
控制循环
循环
在常用的逻辑交互中,自然不能少了循环的逻辑,巧妙的使用循环,能够节省不少的开发时间呢
for
for
允许类每一次循环的时候执行判断命令,如果执行结果通过则执行该次循环。
格式
for NAME [ in LIST ]; do
[COMMAND]
done
示例 1:
#!/bin/bash
# Echo list with space deviced
users='mengj guom tj'
for user in ${users}; do
echo ${user}
done
使用 for
循环默认使用
作为 LIST
的分隔符,上面的示例中可以在终端中输出列表中的每一项。
mengj
guom
tj
示例 2:
默认的分隔符是
,因此我们可以通过更改列表的分隔符,更改分隔符通过声明 IFS
(Internal FIeld Seprator) 来打印不同的 LIST
子元素。
list='mengj,guom,tj'
IFS=,
for item in ${list}; do
echo ${item}
done
上面的示例中我们声明了分隔符 IFS
是 ,
,因此输出的结果和示例 1 的结果相同
mengj
guom
tj
示例 3:
同时我们也可以通过声明列表的范围,来实现控制 for
循环的遍历次数,声明返回需要使用 {}
,花括号内部是符合 Unix
的参数范围约定, 即 {1..10}
代表的是 1 - 10。
# Echo range numbers
for num in {1..10}; do
echo ${num}
done
示例 3 输出的结果是从 1 开始一直输出到 10 为止,需要注意的是在 Bash
的使用 echo
默认在结果后添加 \n
回车符
1
2
3
4
5
6
7
8
9
10
示例 4:
同时 for
循环的列表也可以是多个字符串以 ()
包裹的数组形式。
# Echo array
array=('mengj' 'guom' 'tj')
for item in ${array[@]}; do
echo ${item}
done
for item in ${array[*]}; do
echo ${item}
done
在示例 4 中,我们看到使用了 ${array[@]}
和 ${array[*]}
,这两种形式都是代表的数组本身哦
示例的内容可以从 GitHub 中查看源代码,传送门。
while
while
的代码格式和 if
相似,不同的是 while
能够重复的执行逻辑判断。
格式
while [CONDITION]
do
[COMMANDS]
done
示例:
执行指定的循环10次。
#!/bin/bash
counter=1
while [[ ${counter} -lt 10 ]]; do
echo ${counter}
((counter++))
done
在 GitHub 中查看源代码,传送门。
until
until
的循环判断和 while
相比更加的简单,until
在执行命令的前提下需要执行测试命令。
示例:
#!/bin/bash
counter=1
until [[ ${counter} -gt 10 ]]; do
echo ${counter}
((counter++))
done
我们可以比较一下 until
和 while
循环的不同之处,while
循环使用的是判断条件,而 until
使用的是测试命令,从输出结果中可以看出两个命令的执行结果是相同的。
1
2
3
4
5
6
7
8
9
10
until
的示例源代码已经放在了 GitHub
中,传送门。
循环控制
循环控制主要讲述 continue
和 break
,从字面意思中我们可以看到 continue
是继续的意思,其实 continue
命令是跳过本次循环,然后开始下次循环;而 break
字面上意思是打断的意思,因此 break
的命令是中断循环,执行循环后面的内容。
示例 1:
#!/bin/bash
# 通过使用 while 循环和 case 配合 break 进行循环控制
while true; do
echo "On which topic do you want advice?"
echo "1. politics"
echo "2. startrek"
echo "3. kernelnewbies"
echo "4. sports"
echo "5. bofh-excuses"
echo "6. magic"
echo "7. love"
echo "8. literature"
echo "9. drugs"
echo "10. education"
echo
echo -n "Enter your choice, or 0 for exit: "
read choice
echo
case $choice in
1)
echo 'politics'
;;
2)
echo 'startrek'
;;
3)
echo 'kernelnewbies'
;;
4)
echo 'sports'
;;
5)
echo 'bofh-excuses'
;;
6)
echo 'magic'
;;
7)
echo 'love'
;;
8)
echo 'literature'
;;
9)
echo 'drugs'
;;
10)
echo 'education'
;;
0)
echo "OK, see you!"
break
;;
*)
echo "请从 0 - 10 中选择你喜欢的某一项"
;;
esac
done
该示例中使用 while
和 case
来打印用户选择的结果,如果输入 0
则通过使用 break
退出循环,查看源代码的传送门。
示例 2:
使用 continue
命令来输出 0 - 10, 如果能被 3 整除则跳过此次循环,只输出不能被 3 整除的数字。
#!/bin/bash
for i in {1..10}; do
if [ $(( ${i} % 3 )) -eq 0 ]; then
continue
fi
echo ${i}
done
示例的代码中通过使用 for
来打印 1-10 的数字,如果是 3 的倍数则使用 continue
跳过输出,输出的结果如下:
1
2
4
5
7
8
10
输出的结果中没有 3
6
9
这 3 个数字,可以在我的 GitHub 中查看并下载源代码执行测试哦,传送门。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!