191 lines
4.6 KiB
Markdown
191 lines
4.6 KiB
Markdown
|
在 shell 脚本中,`if` 语句用于条件判断,有多种条件表达式可以使用,其中 `-z`、`-n` 和 `-x` 是用于字符串和文件的条件测试选项。以下是对这些选项的详细解释:
|
|||
|
|
|||
|
### 字符串条件判断
|
|||
|
|
|||
|
#### `-z`
|
|||
|
|
|||
|
`-z` 用于判断字符串是否为空。如果字符串的长度为零,则条件为真。
|
|||
|
|
|||
|
```sh
|
|||
|
if [ -z "$string" ]; then
|
|||
|
echo "String is empty"
|
|||
|
else
|
|||
|
echo "String is not empty"
|
|||
|
fi
|
|||
|
```
|
|||
|
|
|||
|
#### `-n`
|
|||
|
|
|||
|
`-n` 用于判断字符串是否不为空。如果字符串的长度不为零,则条件为真。
|
|||
|
|
|||
|
```sh
|
|||
|
if [ -n "$string" ]; then
|
|||
|
echo "String is not empty"
|
|||
|
else
|
|||
|
echo "String is empty"
|
|||
|
fi
|
|||
|
```
|
|||
|
|
|||
|
### 文件条件判断
|
|||
|
|
|||
|
#### `-x`
|
|||
|
|
|||
|
`-x` 用于判断文件是否有可执行权限。如果文件存在且有可执行权限,则条件为真。
|
|||
|
|
|||
|
```sh
|
|||
|
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` 进行条件判断:
|
|||
|
|
|||
|
```sh
|
|||
|
#!/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)。
|
|||
|
|
|||
|
### 组合示例
|
|||
|
|
|||
|
以下是一个示例脚本,演示如何使用这些条件判断标识符:
|
|||
|
|
|||
|
```sh
|
|||
|
#!/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 脚本中,有多种条件判断标识符可以使用,用于检查文件属性、字符串内容、数值比较和逻辑运算。这些标识符使得脚本能够根据不同条件执行不同的操作,从而增强脚本的灵活性和功能性。
|