1、条件判断
(1)命令
test命令:测试表达式是否成立,若成立返回0,否则返回其他值
格式:
test 条件表达式
[ 条件表达式 ] #[ ]两边要有空格
(2)文件测试
格式:
test 选项 文件/目录路径 test 选项 $变量
[ 选项 文件或目录 ] [ 选项 $变量 ]
常用的操作符:
-e:测试目录或文件是否存在(Exist)。
-d:测试是否为目录(Directory)。
-f:测试是否为文件(File)。
-r:测试当前用户是否有权限读取(Read)。
-w:测试当前用户是否有权限写入(Write)。
-x:测试是否设置有可执行(Excute)权限。
-L:测试是否为软链接文件
(3)整数值比较
格式:
test 整数1 选项 整数2 test 变量1 选项 变量2
[ 整数1 选项 整数2 ] [ 变量1 选项 变量2 ]
常用的操作符:
-eq:等于 ==
-ne:不等于 !=
-gt:大于 \>
-lt:小于 \<
-le:小于等于
-ge:大于等于
[[ 运算表达式 选项 参数]]
[[ 99+1 - eq 100]]:数学运算
(4)字符串测试
格式:
test "字符串1" == "字符串2" [ "字符串1" == "字符串2" ] [[ "字符串1" == "字符串2" ]] 判断字符串是否相同
test "字符串1" != "字符串2" [ "字符串1" != "字符串2" ] [[ "字符串1" != "字符串2" ]] 判断字符串是否不同
[ ["abc" =~ "a" ]]:判断abc里有没有a
test -z "字符串 test -z "$变量" [ -z "字符串"]:判断字符串是否为空
test -n "字符串" test -n "$变量" [-n "$变量"]:判断字符串是否有字符串
(5)逻辑测试
[ 表达式1 ] && [ 表达式2 ] [ 表达式1 -a 表达式2 ] [[ 表达式1 && 表达式2 ]]:且,要求前后表达式都成立
[ 表达式1 ] || [ 表达式2 ] [ 表达式1 -o 表达式2 ] [[ 表达式1 || 表达式2 ]]:或,只需前后表达式成立一个即可
[ 表达式1 ] || 命令1:如果表达式1条件成立不会执行或运算符后面的命令
[ 表达式1 ] && 命令1 || 命令2:如果表达式1条件成立则执行命令1,如果表达式1条件不成立则命令2
[ ! 表达式1 ]:取反,如果表达式1条件成立则最终结果为条件不成立
补充:判断进程是否运行
判断进程是否运行的方法
netstat -lntup | grep :端口/进程名
ss -lntup | grep :端口/进程名
lsof -i :端口
ps -elf | grep -v "grep" | grep -v"$$"
pidof 进程名 | wc -w
killall -0 进程名:判断进程是否存在
2、if语句
(1)单分支结构
if [ 条件表达式 ] if test 条件表达式 if 命令行 &> /dev/null
then
命令序列
...
fiif [ 条件表达式 ];then
命令序列
...
fi等效于
[ 条件表达式 ] && 命令awk -F. 'print $1':以.为分隔符,取第一个参数
(2)多分支结构
if [ 条件表达式 ]
then
命令序列
else
命令序列
fi等效于
[ 条件表达式 ] && 命令1 || 命令2
(3)多分支结构
if [ 条件表达式 ];then
命令序列
elif [ 条件表达式 ];then
命令序列
elif [ 条件表达式 ];then
命令序列
....
else
命令序列
fi
3、case多分支语句
case $变量 in
模式1)
命令序列
;;
模式2)
命令序列
;;
....
*)
命令序列
esac