答案:Linux中if语句根据命令退出状态或表达式真假控制脚本流程,基本结构为if [ condition ]; then ... fi,支持else和elif进行多分支判断。[ ]等价于test命令,用于文件、字符串、数值测试,如-f检查文件存在,-z判断字符串为空,-eq比较数值相等。推荐使用[[ ]]提升可读性和功能,支持正则匹配和&& ||逻辑操作,(( ))适用于整数运算比较。通过命令退出码(0为真)直接判断执行结果,可用!反转逻辑,或用$?获取上一命令状态实现精细错误处理。

在Linux中进行条件判断,我们最常用的工具就是
if
Linux的
if
最基础的语法是这样的:
if [ condition ]; then
# 如果条件为真,执行这里的命令
command1
command2
fi这里的
condition
condition
then
当然,我们经常需要处理“否则”的情况,这就引入了
else
if [ condition ]; then
# 条件为真时执行
command_if_true
else
# 条件为假时执行
command_if_false
fi如果需要处理多个互斥的条件,
elif
if [ condition1 ]; then
# 条件1为真
elif [ condition2 ]; then
# 条件1为假,条件2为真
elif [ condition3 ]; then
# 条件1、2为假,条件3为真
else
# 所有条件都为假
fi这里有个小细节,
[ ]
test
[ -f /path/to/file ]
test -f /path/to/file
[ ]
在Bash的
if
1. 文件和目录测试: 这大概是我在日常运维脚本中最常用的一类。你可能需要检查一个文件是否存在、是否是目录、是否有读写执行权限等等。
-f file
file
-d dir
dir
-e path
path
-s file
file
-r file
-w file
-x file
file
举个例子,我经常会写这样的代码来确保脚本依赖的配置文件存在:
CONFIG_FILE="/etc/myapp/config.conf"
if [ ! -f "$CONFIG_FILE" ]; then
echo "错误:配置文件 $CONFIG_FILE 不存在!请检查。"
exit 1
fi注意这里的
!
2. 字符串测试: 当我们需要比较字符串或者检查字符串是否为空时,这些操作符就很有用了。
string1 = string2
string1
string2
string1 != string2
string1
string2
-z string
string
-n string
string
一个常见的应用场景是检查用户输入是否为空:
read -p "请输入你的名字: " NAME
if [ -z "$NAME" ]; then
echo "名字不能为空!"
else
echo "你好,$NAME!"
fi这里特别要强调的是,用双引号把变量括起来(如
"$NAME"
3. 数值测试: 对于整数的比较,我们不能直接使用
>
<
num1 -eq num2
num1
num2
num1 -ne num2
num1
num2
num1 -gt num2
num1
num2
num1 -ge num2
num1
num2
num1 -lt num2
num1
num2
num1 -le num2
num1
num2
比如,判断一个进程的CPU使用率是否超过阈值:
CPU_USAGE=$(ps -eo %cpu | awk 'NR>1 {sum+=$1} END {print int(sum)}')
THRESHOLD=80
if [ "$CPU_USAGE" -gt "$THRESHOLD" ]; then
echo "警告:CPU使用率高达 $CPU_USAGE%,已超过 $THRESHOLD%!"
fi这里
int()
CPU_USAGE
-gt
4. 逻辑组合: 当需要组合多个条件时,
[ ]
-a
-o
if [ -f "file.txt" -a -w "file.txt" ]; then
echo "file.txt 存在且可写。"
fi但说实话,我个人更喜欢用
[[ ]]
&&
||
[ ]
[[ ]]
(( ))
这个问题问得非常好,这也是Bash脚本编写中一个常见的困惑点。简单来说,它们各有侧重,理解它们的差异能让你写出更健壮、更高效的脚本。
1. [ condition ]
test condition
[ $VAR = "hello" ]
$VAR
-a
-o
&&
||
2. [[ condition ]]
=~
[[ $VAR =~ ^[0-9]+$ ]]
&&
||
我个人在编写只在Bash环境下运行的脚本时,几乎总是优先选择
[[ ]]
# 示例:[[ ]] 的优势
FILE="my file with spaces.txt"
if [[ -f "$FILE" && "$FILE" =~ \.txt$ ]]; then
echo "这是一个带空格的txt文件。"
fi
# 使用 [[ ]] 进行正则表达式匹配
IP_ADDRESS="192.168.1.100"
if [[ "$IP_ADDRESS" =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
echo "$IP_ADDRESS 是一个有效的IP地址格式。"
else
echo "$IP_ADDRESS 不是一个有效的IP地址格式。"
fi3. (( expression ))
+
-
*
/
%
++
--
>
<
==
!=
>=
<=
$
$
如果你需要进行复杂的数学比较,或者需要对变量进行算术操作后再比较,
(( ))
COUNT=10
if (( COUNT > 5 && COUNT < 15 )); then
echo "COUNT 在 5 到 15 之间。"
fi
# 算术运算示例
NUM1=5
NUM2=3
if (( (NUM1 + NUM2) * 2 == 16 )); then
echo "计算结果是 16。"
fi总结一下,对于简单的文件/字符串/数值测试,并且需要最大兼容性时,用
[ ]
[[ ]]
(( ))
在Linux脚本中,命令的执行结果不仅仅是它打印到屏幕上的内容,更重要的是它的退出状态码(Exit Status)。这是理解
if
1. 直接检查命令的退出状态:
if
# 示例:检查文件是否存在,并尝试删除
FILE_TO_DELETE="/tmp/temp_file.txt"
touch "$FILE_TO_DELETE" # 先创建一个文件
if rm "$FILE_TO_DELETE"; then
echo "文件 $FILE_TO_DELETE 已成功删除。"
else
echo "文件 $FILE_TO_DELETE 删除失败!"
fi
# 如果文件不存在,rm会返回非零状态码
if rm "/nonexistent/path/to/file.txt"; then
echo "这行不会被执行,因为删除一个不存在的文件会失败。"
else
echo "删除不存在的文件失败,这是预期行为。"
fi这里,
rm
if
rm
then
else
2. 使用 !
!
# 示例:如果某个服务没有运行,就启动它
SERVICE_NAME="nginx"
if ! systemctl is-active --quiet "$SERVICE_NAME"; then
echo "$SERVICE_NAME 服务未运行,尝试启动..."
sudo systemctl start "$SERVICE_NAME"
else
echo "$SERVICE_NAME 服务正在运行。"
fisystemctl is-active --quiet
!
if
3. 显式检查 $?
$?
if command
$?
# 示例:检查命令是否以特定错误码退出
grep "error" /var/log/syslog
GREP_STATUS=$? # 保存grep的退出状态码
if [ "$GREP_STATUS" -eq 0 ]; then
echo "日志中找到了 'error' 关键字。"
elif [ "$GREP_STATUS" -eq 1 ]; then
echo "日志中没有找到 'error' 关键字。"
else
echo "grep 命令执行出错,退出状态码:$GREP_STATUS"
figrep
$?
这种方式的优点是,你可以捕获到更具体的错误信息,从而让脚本的错误处理更加精细。比如,如果一个命令有多种失败情况,每种对应一个不同的非零退出码,那么通过检查
$?
在编写脚本时,我通常会倾向于直接
if command; then ...
$?
以上就是如何在Linux中条件判断 Linux if语句使用范例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号