Shell浅浅谈(十)流程控制与循环的艺术

基本流程控制

1. if 语句

语法:
if condition
then
    command1
    command2
    ...
fi
单行写法:
if ((4<5));then printf "4<5";fi
# printf :4<5

2. if-else 语句

语法:
if condition
then
    command1
else
    command2
fi

3. if-elif-else 语句

语法:
if condition1
then
    command1
elif condition2
then
    command2
else
    command3
fi
示例:
num_1=9

if ((4<5));then printf "num_1<5"
elif ((num_1<10)); then
    printf "num_1<10"
else 
    printf "other case"
fi    

# printf: num_1<5

判断语句的写法

  1. 使用 [...]

    • 大于:-gt
    • 小于:-lt
    • 等于:-eq
    if [ "$a" -gt "$b" ]; then echo "a > b"; fi
    
  2. 使用 ((...))

    • 大于:>
    • 小于:<
    if (( a > b )); then echo "a > b"; fi
    

循环控制

1. for 循环

语法:
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
done
示例:
for i in 1 2 3 4 5
do
    echo "$i"
done
: '
1
2
3
4
5
'
字符串分词:
for word in This is a string
do
    echo $word
done

2. while 循环

语法:
while condition
do
    command
done
示例:
num_1=1
while (( num_1 <= 10 ))
do
    echo "$num_1"
    let "num_1++"
done

echo "$num_1"

: '
1
2
3
4
5
6
7
8
9
10
11
'
读取输入:
echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的博主: '
while read nickName
do
    echo "是的!$nickName 是一个好博主"
done

3. 无限循环

语法:
while :
do
    command
done

或:

while true
do
    command
done

4. until 循环

while里面的条件相反,是达到该条件才停止循环,比较少用

语法:
until condition
do
    command
done
示例:
a=0
until [ ! $a -lt 10 ]
do
    echo $a
    a=$((a + 1))
done

条件匹配

case ... esac 语句

语法:
case value in
pattern1)
    command1
    ;;
pattern2)
    command2
    ;;
*)
    default_command
    ;;
esac
示例:
num=4
num_1=1
num_2=2
num_3=3

case $num in
    $num_1) printf "num==num_1"
        ;;
    $num_2) printf "num==num_2"
        ;;
    $num_3) printf "num==num_3"
        ;;
    *) printf "other case"
        ;;
esac

# printf: other case

跳出与继续循环

break

  • 跳出所有循环:
while :
do
    read -p "输入 1 到 5 之间的数字:" num
    case $num in
        1|2|3|4|5) echo "你输入的数字为 $num!" ;;
        *) echo "游戏结束"; break ;;
    esac
done

continue

  • 跳过当前循环的剩余部分,直接进入下一次循环:
while :
do
    read -p "输入 1 到 5 之间的数字:" num
    case $num in
        1|2|3|4|5) echo "你输入的数字为 $num!" ;;
        *) echo "输入错误,重新开始"; continue ;;
    esac
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码对我眨眼睛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值