shell编程二-结构化命令
一、if语句
if command
then
commands
fi
if判断的并不是一个比值的对错,而是一个命令,命令执行成功退出码为0即为true
。例如:
#!/bin/bash
if pwd
then
echo "pwd执行正确"
fi
if-else语句
if command
then
commands
else
commands
fi
if command1
then
commands
elif command2
then
commands
fi
二、 条件判断 test
除了命令判断,常用如字符串比较,数字比较等判断,可用test
。
test比较:数字比较,字符串比较,文件比较
写脚本是,不用写test,可以用[]
代替,但注意空格:
if [ condition ]
then
commands
fi
数字比较:
比较 | 描述 |
---|---|
n1 -eq n2 | 是否相等 |
n1 -ge n2 | 是否大于或等于 |
n1 -gt n2 | 是否大于 |
n1 -le n2 | 是否小于等于 |
n1 -lt n2 | 是否小于 |
n1 -ne n2 | 是否不等于 |
字符串比较:
比较 | 描述 |
---|---|
str1 = str2 | 是否相同 |
str1 != str2 | 是否不同 |
str1 < str2 | 是否小于 |
str1 > str2 | 是否大于 |
-n $var | 判断变量是否长度非0 |
-z $var | 判断变量是否长度为0 |
注: 大小于需要转义
文件比较
比较 | 描述 |
---|---|
-d file | 是否存在file目录 |
-e file | 是否存在file |
-f file | 是否存在file文件 |
-r file | file存在并可读 |
-s file | file存在并非空 |
-w file | file存在并可写 |
-x file | file存在并可执行 |
复合条件测试
[ condition1 ] && [ condition2 ] [ condition1 ] || [ condition2 ]
双括号高级比较
(( expression ))
#!/bin/bash
var1=10
if (( $var1 ** 2 > 90 ))
then
echo "10的平方大于90:判断正确"
else
echo "判断错误"
fi
双括方括号
[[ expression ]] 可以使用双方括号做模式匹配
如,有java项目包名为app.1.0-NAPSHOT.jar,现在需要判断是不是快照版本,可以如下判断:
if [[ "${PROJECT_NAME}" =~ -servlet$ ]]
then
echo "项目是快照版本"
fi
三、 case
语法结构
case var in pattern1 | pattern2) commands1;; pattern3) commands2;; *) default commands;; esac