Skip to content

选择语句

在Shell编程中,选择语句用于根据条件执行不同的代码块。Shell脚本中最常用的选择语句是if语句,它允许你根据条件测试的结果来执行不同的代码路径。此外,case语句也是Shell脚本中常用的选择结构,它允许你根据变量的值匹配多个模式,并执行相应的代码块。

if 语句

if语句的基本语法如下:

sh
if [ condition ]; then
    # code to execute if condition is true
elif [ another_condition ]; then
    # code to execute if another_condition is true
else
    # code to execute if none of the above conditions are true
fi

其中,condition是一个条件表达式,它可以是算术比较、字符串比较或文件测试。then关键字后面跟着的是当条件为真时要执行的命令。elif是“else if”的缩写,允许你指定额外的条件。else部分包含当所有前面的条件都不为真时要执行的命令。fi表示if语句的结束。

case 语句

case语句允许你根据变量的值匹配多个模式,并执行相应的代码块。它的基本语法如下:

sh
case variable in
    pattern1)
        # code to execute if variable matches pattern1
        ;;
    pattern2)
        # code to execute if variable matches pattern2
        ;;
    *)
        # code to execute if variable does not match any of the above patterns
        ;;
esac

其中,variable是要匹配的变量,pattern1pattern2等是模式,可以是具体的字符串或通配符表达式。每个模式后面的);;之间是要执行的命令。*)是一个通配模式,用于匹配任何未在前面模式中指定的值。esaccase语句的结束标记,它是case倒过来写的。

示例

以下是一个使用if语句的示例:

sh
#!/bin/bash

num=10

if [ $num -gt 5 ]; then
    echo "Number is greater than 5"
elif [ $num -eq 5 ]; then
    echo "Number is equal to 5"
else
    echo "Number is less than 5"
fi

以下是一个使用case语句的示例:

sh
#!/bin/bash

day=$(date +%u) # 获取星期几,1代表星期一,7代表星期日

case $day in
    1)
        echo "Today is Monday"
        ;;
    2)
        echo "Today is Tuesday"
        ;;
    3)
        echo "Today is Wednesday"
        ;;
    4)
        echo "Today is Thursday"
        ;;
    5)
        echo "Today is Friday"
        ;;
    6)
        echo "Today is Saturday"
        ;;
    7)
        echo "Today is Sunday"
        ;;
    *)
        echo "Invalid day"
        ;;
esac

这两个示例展示了如何在Shell脚本中使用ifcase语句来根据条件执行不同的代码块。

常用的文件比较符

-e 判断对象是否存在

-d 判断对象是否存在,并且为目录

-f 判断对象是否存在,并且为常规文件

-L 判断对象是否存在,并且为符号链接

-h 判断对象是否存在,并且为软链接

-s 判断对象是否存在,并且长度不为0

-r 判断对象是否存在,并且可读

-w 判断对象是否存在,并且可写

-x 判断对象是否存在,并且可执行

-O 判断对象是否存在,并且属于当前用户

-G 判断对象是否存在,并且属于当前用户组

-nt 判断file1是否比file2新 [ "/data/file1" -nt "/data/file2" ]

-ot 判断file1是否比file2旧 [ "/data/file1" -ot "/data/file2" ]

示例

判断文件是否存在

bash
if [ -d "/etc" ]; then
    echo "dir /etc is exist"
else
    echo "dir /etc is not exist"
fi