在CentOS的Shell脚本中,if语句是一种基本的条件判断结构,用于根据不同的条件执行不同的命令,以下是对if语句的详细解释和示例:
基本语法
1、单一if语句

if [ condition ]; then
command
ficondition:要测试的条件表达式。
command:如果条件为真(即返回状态为0),则执行的命令。
2、if...else语句
if [ condition ]; then
command1
else
command2
fi 如果条件为真,执行command1;否则,执行command2。
3、if...elif...else语句
if [ condition1 ]; then
command1
elif [ condition2 ]; then
command2
else
command3
fi 如果第一个条件为真,执行command1;否则,检查第二个条件,如果第二个条件为真,执行command2;否则,执行command3。

4、嵌套if语句
可以在一个if或else块中再嵌套另一个if语句。
常用参数
文件/目录判断
[ a FILE ]:如果文件存在则为真。
[ d FILE ]:如果文件是目录则为真。
[ e FILE ]:如果文件存在则为真。

[ f FILE ]:如果文件是普通文件则为真。
[ r FILE ]:如果文件可读则为真。
[ w FILE ]:如果文件可写则为真。
[ x FILE ]:如果文件可执行则为真。
字符串判断
[ z STRING ]:如果字符串长度为零则为真。
[ n STRING ]:如果字符串长度非零则为真。
[ STRING1 = STRING2 ]:如果两个字符串相等则为真。
[ STRING1 != STRING2 ]:如果字符串不相等则为真。
数值判断
[ INT1 eq INT2 ]:如果两个整数相等则为真。
[ INT1 ne INT2 ]:如果两个整数不等则为真。
[ INT1 gt INT2 ]:如果第一个整数大于第二个整数则为真。
逻辑判断
! EXPR:逻辑非,如果EXPR为假则返回真。
EXPR1 a EXPR2:逻辑与,如果两个表达式都为真则返回真。
EXPR1 o EXPR2:逻辑或,如果其中一个表达式为真则返回真。
实例
判断目录是否存在
#!/bin/bash
file="/root"
if [ d $file ]; then
echo "$file is a directory!"
fi判断文件是否存在并处理
#!/bin/bash
file="/etc/passwd"
if [ f $file ]; then
echo "File exists."
elif [ ! f $file ]; then
echo "File does not exist."
fi检查用户输入的数字范围
#!/bin/bash
echo "Enter a number: "
read num
if [ $num lt 10 ]; then
echo "Number is less than 10."
elif [ $num ge 10 ] && [ $num le 20 ]; then
echo "Number is between 10 and 20."
else
echo "Number is greater than 20."
fi使用双圆括号进行数学运算
#!/bin/bash
a=5
b=3
if (( a + b > 8 )); then
echo "Sum is greater than 8."
fi注意事项
1、[和]之间必须有空格。
2、then和fi是分开的语句,如果在同一行需要用分号分隔。
3、如果判断中有变量,需要加引号以避免错误。
4、注意浮点数的判断不支持。
5、使用逻辑运算符时,确保表达式正确。
6、test命令和方括号[]可以互换使用,但要注意语法细节。
7、嵌套if语句要确保每个if都有对应的fi。
8、使用双方括号[[]]可以进行更复杂的条件测试,但只能在Bash中使用。
if语句是Shell脚本中实现条件控制的基础工具,通过它可以构建出复杂的逻辑判断结构,掌握好if语句的使用,对于编写高效、可靠的Shell脚本至关重要。
