Shell脚本编程基础(三)

Shell 脚本中的条件判断与循环

在 Shell 脚本中,条件判断和循环是实现自动化和控制流程的重要工具。本文将详细介绍 Shell 脚本中的 ifcase 条件判断,以及 forwhile 循环的用法。

1. if 条件判断

if 语句用于根据条件执行不同的代码块。其基本语法如下:

if [ 条件 ]; then
    # 如果条件为真,执行此代码
elif [ 其他条件 ]; then
    # 如果其他条件为真,执行此代码
else
    # 如果所有条件均不为真,执行此代码
fi

示例1:

#!/bin/bash

num=10

if [ $num -gt 5 ]; then
    echo "num 大于 5"
elif [ $num -eq 5 ]; then
    echo "num 等于 5"
else
    echo "num 小于 5"
fi

示例2:
if 语句中,如果 then 直接换行,就不需要使用分号。这种情况下,分号用于在同一行上分隔 then 和条件部分。

if [ 条件 ]
then
    # 如果条件为真,执行此代码
elif [ 其他条件 ]
then
    # 如果其他条件为真,执行此代码
else
    # 如果所有条件均不为真,执行此代码
fi

2. case 条件判断

case 语句用于根据变量的值匹配多个模式,并执行相应的代码块,适用于多分支选择。

基本语法如下:

case 变量 in
模式1)
    # 执行代码
    ;;
模式2)
    # 执行代码
    ;;
*)
    # 默认执行代码
    ;;
esac

示例1:

#!/bin/bash

fruit="apple"

case $fruit in
"apple")
    echo "这是一个苹果。"
    ;;
"banana")
    echo "这是一个香蕉。"
    ;;
*)
    echo "未知的水果。"
    ;;
esac

示例2:
case 语句中使用数字值判断时,可以直接使用数字:

number=2

case $number in
1)
    echo "数字是一。"
    ;;
2)
    echo "数字是二。"
    ;;
3)
    echo "数字是三。"
    ;;
*)
    echo "数字不在范围内。"
    ;;
esac

3. for 循环

  1. for 循环

    语法

    for (( 初始值; 循环控制条件; 变量变化 ))
    do
        程序
    done
    

    案例:从 1 加到 100

    #!/bin/bash
    s=0
    for ((i=1; i<=100; i++))
    do
        s=$((s+i))
    done
    echo $s
    
  2. for 循环(列表)

    语法

    for 变量 in 值1 值2 值3
    do
        程序
    done
    

    案例:顺序输出列表中的数字

    #!/bin/bash
    for loop in 1 2 3 4 5
    do
        echo "The value is: $loop"
    done
    

4. while 循环

语法

while [ 条件判断式 ]
do
    程序
done

案例:从 1 加到 100

#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
    s=$((s+i))
    i=$((i+1))
done
echo $s

5.比较 $*$@

脚本案例
#!/bin/bash

echo 'Using $*:'
for arg in $*
do
    echo "$arg"
done

echo 'Using "$*":'
for arg in "$*"
do
    echo "$arg"
done

echo 'Using $@:'
for arg in $@
do
    echo "$arg"
done

echo 'Using "$@":'
for arg in "$@"
do
    echo "$arg"
done
运行方式

假设脚本名为 compare.sh,通过以下命令运行:

bash compare.sh "arg1" "arg2" "arg3"
输出结果
Using $*:
arg1
arg2
arg3

Using "$*":
arg1 arg2 arg3

Using $@:
arg1
arg2
arg3

Using "$@":
arg1
arg2
arg3
解释
  • $*:未加引号时,每个参数作为独立的字符串输出。
  • "$*":加引号时,所有参数被当作一个整体输出,参数之间用空格分隔。
  • $@:未加引号时,和 $* 表现相同,每个参数作为独立的字符串输出。
  • "$@":加引号时,每个参数保持独立,和未加引号时相同。

总结

Shell 脚本中的条件判断和循环是控制脚本执行流程的关键。通过 ifcase 语句,我们可以根据不同的条件执行相应的操作,而 for 循环和while 循环则使我们能够轻松地处理列表中的每个元素。

拓展内容

1. read 读取控制台输入

基本语法
read [选项] [变量]

选项:

  • -p:指定读取值时的提示符。
  • -t:指定读取值时等待的时间(秒)。

参数:

  • 变量:指定读取值的变量名。
案例:

提示7秒内,读取控制台输入的名称

#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds: " NAME
echo "你的名字是$NAME"

运行此脚本,会在提示符显示 "Enter your name in 7 seconds: ",并等待输入,最多等待7秒。


2.系统函数

basename 基本语法
basename [string / pathname] [suffix]

功能描述: basename 用于提取路径的文件名部分。

选项:

  • suffix:为后缀,如果指定,basename 会去掉路径名或字符串中的后缀。
案例实操

截取文件名称

从路径 /home/bc/banzhang.txt 中提取文件名:

basename /home/bc/banzhang.txt

输出:

banzhang.txt

去掉后缀 .txt

basename /home/bc/banzhang.txt .txt

输出:

banzhang
dirname 基本语法
dirname 文件绝对路径

功能描述: dirname 用于提取路径中的目录部分。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值