typora/daliy_note/9月归档/9.6/shell.md
2024-12-12 10:48:55 +08:00

4.6 KiB
Raw Permalink Blame History

在 shell 脚本中,if 语句用于条件判断,有多种条件表达式可以使用,其中 -z-n-x 是用于字符串和文件的条件测试选项。以下是对这些选项的详细解释:

字符串条件判断

-z

-z 用于判断字符串是否为空。如果字符串的长度为零,则条件为真。

if [ -z "$string" ]; then
    echo "String is empty"
else
    echo "String is not empty"
fi

-n

-n 用于判断字符串是否不为空。如果字符串的长度不为零,则条件为真。

if [ -n "$string" ]; then
    echo "String is not empty"
else
    echo "String is empty"
fi

文件条件判断

-x

-x 用于判断文件是否有可执行权限。如果文件存在且有可执行权限,则条件为真。

if [ -x "$file" ]; then
    echo "File is executable"
else
    echo "File is not executable or does not exist"
fi

其他常见文件条件判断选项

除了 -x,还有其他一些常见的文件条件判断选项:

  • -e:判断文件是否存在。
  • -f:判断是否为普通文件。
  • -d:判断是否为目录。
  • -r:判断文件是否有读权限。
  • -w:判断文件是否有写权限。

综合示例

以下是一个综合示例,演示如何使用 -z-n-x 进行条件判断:

#!/bin/bash

file="/path/to/your/file"
string="Hello, World!"

# 判断字符串是否为空
if [ -z "$string" ]; then
    echo "String is empty"
else
    echo "String is not empty"
fi

# 判断字符串是否不为空
if [ -n "$string" ]; then
    echo "String is not empty"
else
    echo "String is empty"
fi

# 判断文件是否有可执行权限
if [ -x "$file" ]; then
    echo "File is executable"
else
    echo "File is not executable or does not exist"
fi

在 Shell 脚本中,if 条件判断可以使用多种标识符来检查文件属性、字符串内容、数值比较等。以下是一些常见的 if 判断标识符:

文件条件判断标识符

  • -e FILE:判断文件是否存在。
  • -f FILE:判断是否为普通文件。
  • -d FILE:判断是否为目录。
  • -r FILE:判断文件是否可读。
  • -w FILE:判断文件是否可写。
  • -x FILE:判断文件是否可执行。
  • -s FILE:判断文件是否非空(文件大小是否大于零)。
  • -L FILE:判断是否为符号链接。
  • -p FILE判断是否为命名管道FIFO
  • -c FILE:判断是否为字符设备文件。
  • -b FILE:判断是否为块设备文件。

字符串条件判断标识符

  • -z STRING:判断字符串是否为空(长度为零)。
  • -n STRING:判断字符串是否不为空(长度不为零)。
  • STRING1 = STRING2:判断两个字符串是否相等。
  • STRING1 != STRING2:判断两个字符串是否不相等。

数值条件判断标识符

  • -eq等于equal
  • -ne不等于not equal
  • -lt小于less than
  • -le小于或等于less than or equal
  • -gt大于greater than
  • -ge大于或等于greater than or equal

逻辑运算符

  • !逻辑非not
  • -a逻辑与and
  • -o逻辑或or

组合示例

以下是一个示例脚本,演示如何使用这些条件判断标识符:

#!/bin/bash

file="/path/to/your/file"
string1="Hello"
string2="World"
num1=10
num2=20

# 文件条件判断
if [ -e "$file" ]; then
    echo "File exists"
else
    echo "File does not exist"
fi

if [ -d "$file" ]; then
    echo "File is a directory"
else
    echo "File is not a directory"
fi

# 字符串条件判断
if [ -z "$string1" ]; then
    echo "String1 is empty"
else
    echo "String1 is not empty"
fi

if [ "$string1" = "$string2" ]; then
    echo "Strings are equal"
else
    echo "Strings are not equal"
fi

# 数值条件判断
if [ $num1 -eq $num2 ]; then
    echo "Numbers are equal"
else
    echo "Numbers are not equal"
fi

if [ $num1 -lt $num2 ]; then
    echo "num1 is less than num2"
else
    echo "num1 is not less than num2"
fi

# 逻辑运算
if [ -e "$file" -a -x "$file" ]; then
    echo "File exists and is executable"
else
    echo "File does not exist or is not executable"
fi

if [ -n "$string1" -o -n "$string2" ]; then
    echo "At least one of the strings is not empty"
else
    echo "Both strings are empty"
fi

结论

在 shell 脚本中,有多种条件判断标识符可以使用,用于检查文件属性、字符串内容、数值比较和逻辑运算。这些标识符使得脚本能够根据不同条件执行不同的操作,从而增强脚本的灵活性和功能性。