// 安全研究 · 2024-11-22

Shell脚本基础:条件判断与选择语句

@[TOC](内容预览 ≧∀≦ゞ

在Shell脚本中,条件判断与选择语句是实现逻辑分支的重要工具。通过这些语句,脚本可以根据输入或环境的不同情况灵活执行不同的操作,从而完成更复杂的任务。

本文将重点介绍两种主要的选择语句:if条件语句和**case选择语句**,并结合数值比较、文件测试、字符串操作等内容帮助你更好地理解它们的实际应用。


if 条件判断

条件判断允许脚本根据一个布尔条件(例如数字比较、文件状态或字符串内容)执行不同的操作。在Shell脚本中,if语句是最常用的条件判断语句。

基本结构

if语句的基本语法结构如下:

if [条件]; then
    # 条件为真时执行的命令
else
    # 条件为假时执行的命令
fi

中括号([ ])用于对表达式进行基本的条件判断,而双中括号([[ ]])是Bash的扩展版本,功能更强大,支持复杂的条件判断和正则匹配。

在之前的文章中,我们介绍了算术运算符、逻辑运算符、字符串运算符等,这些运算符同样是条件判断的重要组成部分。下面我们再接着介绍其他运算符的使用案例。

数值比较运算符

Shell脚本中的数值比较运算符常用于对整数进行判断:

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

示例:数值比较

#!/bin/bash

num1=78
num2=98

if [ $num1 -eq $num2 ]; then
    echo "两数相等"
else
    echo "两数不相等"
fi

文件测试运算符

文件测试运算符可以判断文件的状态,例如是否存在、是否为目录、权限是否可用等。

  • -e:文件是否存在
  • -f:是否为普通文件
  • -d:是否为目录
  • -r:是否可读
  • -w:是否可写
  • -x:是否可执行

示例:文件存在测试

#!/bin/bash

if [ -e /tmp/testfile ]; then
    echo "文件存在"
else
    echo "文件不存在"
fi

字符串比较运算符

字符串比较运算符用于判断字符串是否相等或比较大小:

  • =:判断字符串是否相等
  • !=:判断字符串是否不相等
  • <:判断字符串是否小于另一个字符串(字典序)
  • >:判断字符串是否大于另一个字符串(字典序)

示例:字符串比较

#!/bin/bash

str1="hello"
str2="world"

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

使用elif和多条件判断

elif(else if的缩写)允许对多个条件进行分支判断,而逻辑运算符(&&和||)可以组合多个条件:

示例:多个条件判断

#!/bin/bash

num=50

if [ $num -lt 20 ]; then
    echo "数值小于20"
elif [ $num -le 50 ] && [ $num -ge 30 ]; then
    echo "数值介于30到50之间"
else
    echo "数值大于50"
fi

case 选择语句

case语句是另一个重要的选择语句,特别适用于多分支判断情况,例如处理用户输入或配置选项。

基本结构

case的基本语法如下:

case 变量 in
    模式1)
        # 匹配模式1时执行的命令
        ;;
    模式2)
        # 匹配模式2时执行的命令
        ;;
    *)
        # 默认操作(可选)
        ;;
esac

使用场景

1. 菜单选择

示例:实现简单菜单

#!/bin/bash

echo "请选择操作:"
echo "1) 显示当前目录"
echo "2) 显示当前用户"
echo "3) 退出"

read -p "输入选择: " choice

case $choice in
    1)
        echo "当前目录为:$(pwd)"
        ;;
    2)
        echo "当前用户为:$(whoami)"
        ;;
    3)
        echo "退出程序"
        exit 0
        ;;
    *)
        echo "无效选择"
        ;;
esac

2. 匹配模式

case支持通配符,例如*表示任意内容,[a-z]表示小写字母范围。

示例:匹配文件类型

#!/bin/bash

filename="example.txt"

case $filename in
    *.txt)
        echo "这是一个文本文件"
        ;;
    *.sh)
        echo "这是一个Shell脚本"
        ;;
    *)
        echo "未知文件类型"
        ;;
esac

小结

在Shell脚本中,条件判断与选择语句是脚本控制流的核心部分:

  • if语句:适用于简单或复杂的条件判断,可结合数值比较、文件测试和字符串比较等运算符进行灵活判断。
  • case语句:用于处理多种选择情况,语法简洁,特别适合用户输入或模式匹配。

通过结合这两种语句,脚本可以实现多种逻辑控制,满足实际编程需求。在编写脚本时,根据具体场景选择适合的语句结构,可以让脚本更加高效和易读。

最后,再次感谢您阅读本篇文章,如果您对文中内容有任何疑问或建议,欢迎在评论区与我交流!您的点赞和分享将是我继续创作的动力。

原文 https://blog.csdn.net/2301_79518550/article/details/143985034