【shell编程入门】条件判断

发布时间:2024年01月16日

前言

在 shell 编程中,[] 通常用于条件测试。

条件中的参数

字符串比较:

  • =: 字符串相等。
  • !=: 字符串不相等。
if [ "$string1" = "$string2" ]; then
    echo "字符串相等"
fi

文件测试:

  • -e: 文件或目录是否存在。
  • -f: 是否为普通文件。
  • -d: 是否为目录。
  • -s: 文件是否非空。
if [ -e "/path/to/file" ]; then
    echo "文件存在"
fi

数字比较:

  • -eq: 等于。
  • -ne: 不等于。
  • -lt: 小于。
  • -le: 小于等于。
  • -gt: 大于。
  • -ge: 大于等于。
if [ "$num1" -eq "$num2" ]; then
    echo "数字相等"
fi

文件权限:

  • -r: 是否可读。
  • -w: 是否可写。
  • -x: 是否可执行。
if [ -r "/path/to/file" ]; then
    echo "文件可读"
fi

?实例

?检查文件是否存在

if [ -e "/path/to/file" ]; then
    echo "文件存在"
else
    echo "文件不存在"
fi

?比较数字大小

num1=5
num2=10

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

?字符串比较

string1="hello"
string2="world"

if [ "$string1" = "$string2" ]; then
    echo "字符串相等"
else
    echo "字符串不相等"
fi

?检查目录是否为空

if [ -z "$(ls -A /path/to/directory)" ]; then
    echo "目录为空"
else
    echo "目录不为空"
fi

逻辑运算

condition1=true
condition2=false

if [ "$condition1" = true -a "$condition2" = false ]; then
    echo "满足逻辑与条件"
else
    echo "不满足逻辑与条件"
fi

使用逻辑非判断文件是否不可写

if [ ! -w "/path/to/file" ]; then
    echo "文件不可写"
else
    echo "文件可写"
fi

?比较字符串长度

str="abc"

if [ ${#str} -gt 2 ]; then
    echo "字符串长度大于2"
else
    echo "字符串长度不大于2"
fi

使用逻辑或检查多个条件

age=25

if [ "$age" -lt 18 -o "$age" -gt 65 ]; then
    echo "年龄不在工作范围内"
else
    echo "年龄在工作范围内"
fi

检查是否为目录

dir="/path/to/directory"

if [ -d "$dir" ]; then
    echo "是一个目录"
else
    echo "不是一个目录"
fi

?检查用户是否具有特定权限

if [ -w "/path/to/file" -a -r "/path/to/file" ]; then
    echo "用户具有读写权限"
else
    echo "用户缺少读写权限"
fi

使用正则表达式匹配

email="user@example.com"

if [[ "$email" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then
    echo "有效的电子邮件地址"
else
    echo "无效的电子邮件地址"
fi

?检查命令是否执行成功

if [ $? -eq 0 ]; then
    echo "上一个命令成功执行"
else
    echo "上一个命令执行失败"
fi

检查变量是否被定义

if [ -z "$my_variable" ]; then
    echo "变量未定义"
else
    echo "变量已定义"
fi

使用通配符进行字符串匹配

filename="document.txt"

if [ "$filename" = *.txt ]; then
    echo "文件名以 .txt 结尾"
else
    echo "文件名不以 .txt 结尾"
fi

检查用户是否为超级用户

if [ $(id -u) -eq 0 ]; then
    echo "当前用户是超级用户 (root)"
else
    echo "当前用户不是超级用户"
fi

?检查数组是否为空

my_array=("item1" "item2")

if [ ${#my_array[@]} -eq 0 ]; then
    echo "数组为空"
else
    echo "数组不为空"
fi

使用 case 语句进行多条件判断

fruit="apple"

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

循环遍历目录中的文件并执行操作

directory="/path/to/files"

for file in "$directory"/*; do
    if [ -f "$file" ]; then
        echo "处理文件: $file"
        # 在这里添加你的操作
    fi
done

根据用户输入执行不同的操作

echo "请选择操作: 1) 备份 2) 恢复 3) 退出"
read choice

case $choice in
    1)
        echo "执行备份操作"
        # 在这里添加备份操作的代码
        ;;
    2)
        echo "执行恢复操作"
        # 在这里添加恢复操作的代码
        ;;
    3)
        echo "退出"
        ;;
    *)
        echo "无效的选择"
        ;;
esac

检查多个文件的权限并生成报告

files=( "/path/to/file1" "/path/to/file2" "/path/to/file3" )

for file in "${files[@]}"; do
    if [ -e "$file" ]; then
        echo "文件: $file"
        if [ -r "$file" ]; then
            echo "可读"
        fi
        if [ -w "$file" ]; then
            echo "可写"
        fi
        if [ -x "$file" ]; then
            echo "可执行"
        fi
        echo "---"
    else
        echo "文件不存在: $file"
    fi
done

循环等待用户输入直到有效输入为止

valid_input=false

while [ "$valid_input" = false ]; do
    read -p "请输入一个有效的数字: " number

    if [[ "$number" =~ ^[0-9]+$ ]]; then
        echo "有效的输入: $number"
        valid_input=true
    else
        echo "无效的输入,请输入一个数字。"
    fi
done

文章来源:https://blog.csdn.net/qq_44091004/article/details/135612953
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。