typora/daliy_note/9月归档/9.6/shell.md

191 lines
4.6 KiB
Markdown
Raw Permalink Normal View History

2024-12-11 21:48:55 -05:00
在 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 脚本中,有多种条件判断标识符可以使用,用于检查文件属性、字符串内容、数值比较和逻辑运算。这些标识符使得脚本能够根据不同条件执行不同的操作,从而增强脚本的灵活性和功能性。