Shell--流程控制

1、if else

1.1 if

  • if 语句语法格式:
if condition; then
    command1 
    command2
    ...
    commandN 
fi
demo
  • 举例
vim if_test.sh 
#!/bin/bash

a=20

if [ $a -gt 10 ]; then
        echo "a 大于 10"
fi

末尾的fi就是if倒过来拼写,后面还会遇到类似的

1.2 if else

  • if else 语法格式:
if condition; then
    command1
    command2
    ...
    commandN
else
    command
fi

1.3 if else-if else

  • if else-if else 语法格式:
if condition1; then
    command1
elif condition2; then 
    command2
else
    commandN
fi

elif 是 elseif的简写

1.4案例

  • 需求1 :判断 a 是否大于 100
  • 需求2 :判断 a 是否等于 b
  • 需求3 :判断 a 与 b 比较
  • 需求4 :判断 (a + 10) 和 (b * b) 比较大小
vim if_test.sh 
#!/bin/bash

a=20
b=10

# 需求1: 判断 a 是否大于 100
if [ $a > 100 ]; then
        echo "$a 大于 100"
fi


# 需求2: 判断 a 是否等于 b
if [ $a -eq $b ]; then
        echo "$a 等于 $b"
else
        echo "$a 不等于 $b"
fi

# 需求3: 判断 a 与 b 比较
if [ $a -lt $b ]; then
        echo "$a 小于 $b"
elif [ $a -eq $b ]; then
        echo "$a 等于 $b"
else
        echo "$a 大于 $b"
fi


# 需求4: 判断 (a + 10) 和 (b * b) 比较大小
if test $[ a + 10 ] -gt $[ b * b ]; then
        echo "(a+10) 大于 (b * b)"
else 
        echo "(a+10) 小于或等于 (b*b)"
fi

2、for 循环

2.1 格式

for variable in (list); do 
    command
    command
    ...
done

2.2案例

  • 需求1: 遍历 1~5
  • 需求2: 遍历 1~100
  • 需求3: 遍历 1~100之间的奇数
  • 需求4: 遍历 根目录 下的内容
vim for_test.sh
#!/bin/bash

# 需求1: 遍历 1~5
for i in 1 2 3 4 5; do
        echo $i;
done

for i in {1..5}; do
        echo $i
done

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

# 需求2: 遍历 1~100
for i in {1..100}; do
        echo $i
done

# 需求3: 遍历 1~100之间的奇数
for i in {1..100..2}; do
        echo $i
done

# 需求4: 遍历 根目录 下的内容
for f in `ls /`; do
        echo $f
done

3 、while语句

  • while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式为:
while condition; do
    command
done
  • 需求: 计算 1~100 的和
    • 初始值; i=1
    • 和值: sum=0;
    • while i<=100;
    • sum = sum + i;
    • i++;
    • 打印 sum的值
#!/bin/bash

sum=0
i=1
while [ $i -le 100 ]; do
        sum=$[ sum + i]
        i=$[ i + 1 ]
done

echo $sum
  • 运行脚本,输出:
5050

点击这里:小于等于le参考另一篇

4、无限循环

  • 无限循环语法格式:
while true; do
    command
done
  • 需求: 每隔1秒 打印一次当前时间
#!/bin/bash

while true; do
        date
        sleep 1
done

5、case(switch)

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

    模式1)
        command1
        command2
        ...
        commandN
        ;;
    模式2)
        command1
        command2
        ...
        commandN
        ;;
esac
  • case工作方式如上所示。取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。
  • 取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
  • 下面的脚本提示输入1到4,与每一种模式进行匹配:
echo '输入 1 到 4 之间的数字:'

read aNum

case $aNum in
    1)  echo '你选择了 1'
    ;;

    2)  echo '你选择了 2'
    ;;

    3)  echo '你选择了 3'
    ;;

    4)  echo '你选择了 4'
    ;;

    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac
  • 输入不同的内容,会有不同的结果

6、跳出循环

  • 在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue

6.1 break命令

break命令允许跳出所有循环(终止执行后面的所有循环)

  • 需求: 执行死循环 每隔1秒打印当前时间, 执行10次停止
#!/bin/bash
#需求: 执行死循环 每隔1秒打印当前时间, 执行10次停止 
i=1;
while true; do
        sleep 1
        echo $i `date +"%Y-%m-%d %H:%M:%S"`

        i=$[ i + 1]
        if [ $i -gt 10 ]; then
                break
        fi
done

6.2 continue

  • continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环
  • 需求: 打印 1~30, 注意 跳过3的倍数
#!/bin/bash

# 需求: 打印 1~30, 注意 跳过3的倍数

for i in {1..30}; do
        if test $[ i % 3 ] -eq 0; then
                continue
        fi
        echo $i
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值