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

- if [ condition ]; then
- command
- fi
condition
:要测试的条件表达式。
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脚本至关重要。