自学内容网 自学内容网

Shell脚本6 -- 条件判断if

声明:
本文的学习内容来源于B站up主“泷羽sec”视频【shell编程(4)脚本与用户交互以及if条件判断】的公开分享,所有内容仅限于网络安全技术的交流学习,不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题,请联系本人,我将立即删除相关内容。
本文旨在帮助网络安全爱好者提升自身安全技能,并严格遵守国家法律法规。任何人利用本文中的信息从事违法活动,均与本文作者和“泷羽sec”无关。请读者自觉遵纪守法,合理合法使用相关知识。


在 Shell 脚本中,if 语句是实现条件判断和分支逻辑的核心语法。通过使用 if,我们可以根据条件执行不同的操作,使脚本更加灵活和强大。本文将介绍 if 语句的基本语法、常见使用场景及注意事项。


1 基本语法

Shell 中的 if 语句的基本结构如下:

if 条件; then
    命令1
    命令2
fi

常见的扩展形式包括:

  1. if-else 语句:
if 条件; then
命令1
else
命令2
fi
  1. if-elif-else 语句:
if 条件1; then
命令1
elif 条件2; then
命令2
else
命令3
fi

2 条件判断方式

if 中,条件判断主要依赖 test[] 命令。以下是常见的条件表达式:

2.1 文件条件

  • -e file:文件存在。
  • -d file:文件是目录。
  • -f file:文件是普通文件。
  • -s file:文件大小非零。

示例:

if [ -e "/etc/passwd" ]; then
echo "文件存在"
fi

Pasted image 20241118203753

2.2 字符串条件

  • [ "$a" = "$b" ]:判断字符串是否相等。
  • [ -z "$a" ]:判断字符串是否为空。

示例:

if [ "$USER" = "root" ]; then
echo "当前用户是 root"
fi

Pasted image 20241118203919

2.3 数值条件

  • -eq:等于。
  • -ne:不等于。
  • -gt:大于。
  • -lt:小于。

示例:

if [ "$1" -gt 10 ]; then
echo "参数大于 10"
fi

Pasted image 20241118203954

2.4 逻辑运算符

  • [ 条件1 -a 条件2 ] 或者 [ 条件1 ] && [ 条件2 ]:逻辑与。

  • [ 条件1 -o 条件2 ] 或者 [ 条件1 ] || [ 条件2 ]:逻辑或。

  • ! 条件:逻辑非。

    示例:

if [ -z "$1" ] || [ -z "$2" ]; then
    echo "请提供两个参数"
    exit 1
fi

if [ "$1" -lt 10 -a "$2" -lt 10 ]; then
    echo "参数1和参数2都小于10"
fi

Pasted image 20241118204528


3 示例

3.2 示例 1:检查文件类型

#!/bin/bash
file="/etc/passwd"

if [ -f "$file" ]; then
    echo "$file 是一个普通文件"
elif [ -d "$file" ]; then
    echo "$file 是一个目录"
else
    echo "$file 不存在或类型未知"
fi

Pasted image 20241118204631

3.2 示例 2:判断用户输入

#!/bin/bash
read -p "请输入一个数字:" number

if [ "$number" -gt 0 ]; then
    echo "这是一个正数"
elif [ "$number" -lt 0 ]; then
    echo "这是一个负数"
else
    echo "这是零"
fi

Pasted image 20241118204715

3.2 示例 3:综合逻辑判断

#!/bin/bash
if [ $# -eq 2 ]; then
    echo "参数数量正确"
    if [ "$1" = "$2" ]; then
        echo "两个参数相等"
    else
        echo "两个参数不相等"
    fi
else
    echo "请输入两个参数"
fi

Pasted image 20241118204802


4 注意事项

  1. 条件语句的书写:

    • 条件表达式中的变量应加引号,防止因空值导致语法错误。
    • [ 条件 ] 和条件内容之间需要有空格,否则会报错。
  2. 使用 test 命令:

    • test 命令和 [] 等价,可以直接使用,如:
      if test -e "/etc/passwd"; then
          echo "文件存在"
      fi
      
  3. Shell 的兼容性问题:

    • bashsh 中,if 的语法一致,但某些高级功能可能在不同版本中表现不同。

原文地址:https://blog.csdn.net/CrossProblems/article/details/143866784

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!