Shell编辑之条件语句

一,条件测试操作

        1:文件测试

文件测试操作用来检查文件的各种属性,如文件是否存在、是否可读、是否为空等。常用的文件测试操作符包括:

  • -e 文件存在性测试
  • -f 是否为普通文件
  • -d 是否为目录
  • -r 是否可读
  • -w 是否可写
  • -x 是否可执行
  • -s 文件是否非空
  • -b 是否为块设备文件
  • -c 是否为字符设备文件

示例:

if [ -f "/path/to/file" ]; then
    echo "文件存在且为普通文件"
else
    echo "文件不存在或不是普通文件"
fi

        2:整数值比较

整数值比较用于判断两个数字之间的关系,常见的比较操作符有:

  • -eq 等于
  • -ne 不等于
  • -gt 大于
  • -ge 大于等于
  • -lt 小于
  • -le 小于等于

示例:

num1=10
num2=20

if [ $num1 -lt $num2 ]; then
    echo "num1小于num2"
fi

        3:字符串比较

字符串比较用于判断两个字符串之间的关系,操作符包括:

  • = 或 == 相等(注意在某些Shell中推荐使用双等号)
  • != 不相等
  • -z 字符串长度为零,即空字符串
  • -n 字符串长度不为零

示例:

str1="Hello"
str2="World"

if [ "$str1" = "$str2" ]; then
    echo "两个字符串相等"
else
    echo "两个字符串不相等"
fi

        4:逻辑测试

逻辑测试用于组合多个条件表达式,实现更复杂的逻辑判断。主要逻辑操作符有:

  • -a 逻辑与(在某些Shell中,直接用空格代替)
  • -o 逻辑或
  • ! 逻辑非

但是,在编写脚本时,为了更好的可读性和兼容性,建议使用双括号语法或[[ ... ]]来实现逻辑运算:

示例:

a=1
b=2

if [[ $a -eq 1 && $b -eq 2 ]]; then
    echo "a等于1且b等于2"
fi

if [[ $a -eq 1 || $b -eq 3 ]]; then
    echo "a等于1或b等于3"
fi

if [[ ! $a -eq 2 ]]; then
    echo "a不等于2"
fi

通过这些基本的条件测试和逻辑操作符,您可以构建出复杂的条件语句,以满足Shell脚本中的各种需求。

二,if条件语句

        1:if语句的结构

                (1):单分支if语句

单分支if语句只包含一个条件判断,如果该条件为真,则执行紧跟其后的代码块。这是最基本的形式,适用于只需要在特定条件满足时执行操作的场景。

结构示例:

if 条件表达式; then
    # 条件为真时执行的命令序列
    command1
    command2
fi

应用实例: 检查当前用户是否具有执行某命令的权限(例如,检查是否为root用户)。

if [ "$(id -u)" -eq 0 ]; then
    echo "您具有管理员权限。"
fi

                (2):双分支if语句

双分支if语句在条件为真时执行一组命令,否则执行另一组命令。它用于需要区分两种不同情况的场景。

结构示例:

if 条件表达式; then
    # 条件为真时执行的命令序列
    command_if_true
else
    # 条件为假时执行的命令序列
    command_if_false
fi

应用实例: 根据用户输入决定输出信息。

read -p "请输入'yes'或'no': " answer
if [ "$answer" = "yes" ]; then
    echo "您选择了肯定。"
else
    echo "您选择了否定。"
fi

                (3):多分支if语句

多分支if语句通过elif(else if)关键字添加更多的条件判断,使得可以根据多个不同的条件执行不同的命令序列。当第一个条件不满足时,会继续检查下一个elif条件,直到有一个条件满足或执行到else部分。

结构示例:

if 条件表达式1; then
    # 第一个条件为真时执行的命令序列
    command_for_case1
elif 条件表达式2; then
    # 第二个条件为真时执行的命令序列
    command_for_case2
...
elif 条件表达式N; then
    # 第N个条件为真时执行的命令序列
    command_for_caseN
else
    # 所有条件都不满足时执行的命令序列
    command_default
fi

应用实例: 根据分数划分成绩等级。

score=$1
if [ "$score" -ge 90 ]; then
    echo "成绩等级:A"
elif [ "$score" -ge 80 ]; then
    echo "成绩等级:B"
elif [ "$score" -ge 70 ]; then
    echo "成绩等级:C"
elif [ "$score" -ge 60 ]; then
    echo "成绩等级:D"
else
    echo "成绩等级:F"
fi

通过上述示例,可以看到if语句能够灵活地应对各种条件判断需求,从简单的单条件判断到复杂的多条件分支处理,都是构建Shell脚本逻辑控制的核心工具。

三,case分支语句

1:case语句的结构

case语句在Shell脚本中提供了一种优雅的方式来处理多种可能的输入或条件分支。它的基本结构如下:

case 表达式 in
    模式1)
        命令序列1
        ;;
    模式2)
        命令序列2
        ;;
    ...
    *)
        默认命令序列
        ;;
esac

其中,case后面跟着一个要匹配的表达式(通常是变量),然后是一系列以模式(也称为“case”)开始的分支。每个模式后跟一对圆括号,里面是匹配的值或模式。当表达式的值与某个模式匹配时,相应的命令序列被执行。;;用于表示每个分支的结束,而*)表示默认分支,当没有任何模式匹配时执行。

2. case语句应用示例

(1)检查用户输入的字符类型

这个例子中,脚本会根据用户输入的单个字符,判断它是字母、数字还是其他符号,并给出相应的反馈。

#!/bin/bash

echo "请输入一个字符:"
read -n 1 char

case $char in
    [a-zA-Z])
        echo "您输入的是字母。"
        ;;
    [0-9])
        echo "您输入的是数字。"
        ;;
    *)
        echo "您输入的是特殊字符。"
        ;;
esac

(2)编写系统服务脚本

假设我们需要编写一个简单的服务管理脚本,用于控制名为myservice的服务的启动、停止和重启操作。case语句非常适合处理这种根据不同的命令参数执行不同操作的场景。

#!/bin/bash

# 定义服务操作函数
start_service() {
    echo "正在启动服务..."
    # 实际启动服务的命令
}

stop_service() {
    echo "正在停止服务..."
    # 实际停止服务的命令
}

restart_service() {
    echo "正在重启服务..."
    # 实际重启服务的命令
}

# 主体逻辑
case "$1" in
    start)
        start_service
        ;;
    stop)
        stop_service
        ;;
    restart)
        restart_service
        ;;
    *)
        echo "用法: $0 {start|stop|restart}"
        exit 1
        ;;
esac

在这个脚本中,根据传递给脚本的第一个参数($1),执行相应的服务操作。如果参数不匹配任何预定义的操作,则打印用法信息并退出脚本。

case语句通过提供一种清晰且易于扩展的方式来处理多分支选择,极大地增强了Shell脚本的灵活性和可维护性。

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值