if else
判断是否成年
#! /bin/bash echo -n "请输入你的年龄:" read age if [ $age -ge 18 ];then echo "已成年" else echo "未成年" fi
判断2个数字的关系(大于、等于、小于)
#! /bin/bash echo -n "请输入第一个数字:" read a echo -n "请输入第二个数字:" read b if [ $a -gt $b ];then echo "前者大于后者" elif [ $a -eq $b ];then echo "前者等于后者" else echo "前者小于后者" fi
简化if else
if和else语句能够嵌套使用。if的条件判断部分可能会变得很长,但可以用逻辑运算符将它变得简洁一些:
[ condition ] && action; # 如果condition为真,则执行action
[ condition ] || action; # 如果condition为假,则执行action
case
case语句匹配一个值或一个模式,如果匹配成功,则执行相匹配的代码。
#! /bin/bash case "b" in "a") echo "输出a" ;; # ;; 相等于 break "b") echo "输出b" ;; *) # *) 相当于 default echo "输出默认值" ;; esac
for循环
for循环:条件成立时,就循环执行do子句。条件不成立时,退出for循环。
#! /bin/bash for x in {1..5} # {1..5} 相当于 1 2 3 4 5 do echo $x done
for循环的另一种写法
#! /bin/bash for((i=1;i<=5;i++)) { echo $i }
while循环
while循环:条件成立时,就循环执行do子句。条件不成立时,退出while循环。
#! /bin/bash num=1 while [ $num -le 5 ] do echo $num let num=num+1 done
while无限循环的两种写法:while : 、while true
推荐使用 while : ,这种写法效率较高。按 Ctrl + C 终止while循环。
#! /bin/bash time=0 while true do echo "时间 - ${time}s" let time=time+1 sleep 1 done
#! /bin/bash time=0 while : do echo "时间 - ${time}s" let time=time+1 sleep 1 done
备注: 在大多数现代系统中,true是作为/bin中的一个二进制文件来实现的。这就意味着每执行一次之前提到的while循环,shell就不得不生成一个进程。为了避免这种情况,可以使用shell的内建命令:,该命令的退出状态总是为0
until循环
until循环:条件不成立时,就循环执行do子句。条件成立时,退出until循环。
#! /bin/bash num=1 until [ $num -gt 5 ] do echo $num let num=num+1 done
continue和break
continue:跳过当前循环。 break:跳出当前循环。
#! /bin/bash num=1 # 打印1-5。当打印4时,跳过当前循环。输出:1 2 3 5 while [ $num -le 5 ] do if [ $num -eq 4 ];then let num=num+1 continue # continue:跳过当前循环。 else echo $num let num=num+1 fi done
#! /bin/bash num=1 # 打印1-5。当打印4时,跳出当前循环。输出:1 2 3 while [ $num -le 5 ] do if [ $num -eq 4 ];then let num=num+1 break # break:跳出当前循环。 else echo $num let num=num+1 fi done