Shell学习08:流程控制

本文详细介绍了Shell编程中的流程控制结构,包括if-else、for、while、无限循环、until循环、case语句以及跳出循环的break和continue命令。通过实例展示了各种循环和条件判断的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shell中的流程控制不能为空

if else

if 语句格式
if condition
then
    command1 
    command2
    ...
    commandN 
fi

写成一行的形式,除了最后一个fi,每个语句后面都需要加上 ;进行语句分割,否则会报错

if [ "lop" = "lop" ]; then echo "true"; fi
if else 语句格式

前面说过流程控制不能为空,即如果if条件中else 的值为空,那么else就不要写。因此if 与if else 分开来讲。

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi
if else-if else 语句格式
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

for 循环

语句格式

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

实例

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

# 输出为
The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5

也可以使用以下形式的语句

for ((i=1;i<=5;i++))
do
    echo $i
done

# 输出为
1
2
3
4
5

while 循环

用于循环判断/读取信息,直到判断条件为假时退出。语句格式:

while condition
do
    command
done

while还可以和read命令连用,用于循环读取信息

echo '按下 <CTRL-D> 退出'
echo -n '输入你的名字: '
while read NAME
do
    echo "你好!${NAME}!"
done

这种方法会造成无限死循环,因此需要 CTRL-D 退出

无限循环

除了上面讲的通过while与read连用造成无限循环外,还可以使用下面几种方法进入无限循环

# 1
while :
do
    command
done

# 2
while true
do
    command
done

# 3
for (( ; ; ))

until 循环

与while 循环在处理方式上正好相反,until 循环执行一系列命令直至条件为 true 时停止。语句格式:condition条件为假则一直执行

until condition
do
    command
done

case

多选择语句,可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。语句格式:

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

举个栗子

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

输入不同的内容,会有不同的结果,例如:

输入 1 到 4 之间的数字:
你输入的数字为:
2
你选择了 2

esac作为case 语句的结束标志,与前面if 语句的fi 异曲同工。并且每个case分支用右圆括号,用两个分号表示break。

跳出循环

break 命令

break命令允许跳出所有循环(终止执行后面的所有循环),直接上例子

#! /bin/bash

while read num
do
    echo "你输入的数字为:${num}"
    if [ ${num} -eq 2]
    then
        echo "输入正确!"
        break
    else
        echo "输入错误,请重新输入:"
    fi
done
# 执行脚本
sh test.sh
3

# 输出为
你输入的数字为:3
输入错误,请重新输入:

# 执行脚本
sh test.sh
2

# 输出为
你输入的数字为:2
输入正确!
continue 命令

与break类似,但是不会跳出所有循环,仅仅跳出当前循环。

#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字: "
    read Num
    case $Num in
        1|2|3|4|5) echo "你输入的数字为 $Num!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的!"
            continue
            echo "游戏结束"
        ;;
    esac
done

运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句 echo “游戏结束” 永远不会被执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值