流程控制语句

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
原文地址:https://www.cnblogs.com/lfjn/p/11381653.html