目录
- Shell 条件测试与比较
- 脚本条件测试
- 文本测试表达式
- 字符串测试表达式
- 整数二元比较操作符
- 逻辑操作符
- 区别总结
- if 语句
- Shell 函数
- 基础执行
Shell 条件测试与比较
脚本条件测试
# -f判断文件是否存在,如果存在返回真,反之为假
# 一下结构类似于三元运算符,文件存在则执行true,不存在则执行false
test -f file && echo true || echo false# 使用中括号包裹test所有参数及其对应值
# 中括号左右端都必须预留一个空格距离,否则报错
test [ -f file ] && echo 1 || echo 2
一般的,都建议运算符号之间没有距离(即没有很多空格阻隔)
文本测试表达式
# 对单个文件变量进行测试
[ -f "$fileval" ] && echo 1 || echo 0
实际开发中常用的条件判断语句模板
如果条件返回 true,则执行大括号内的所有指令
[ 条件 ] &&{命令1命令2命令3
}
字符串测试表达式
使用时特别注意空格间距的安排!
# -n "abs" 若字符串长度非0,返回true
[ -n "abs" ] && echo 1 || echo 0# -z "abs" 若字符串长度为0,返回true
[ -n "" ] && echo 1 || echo 0
整数二元比较操作符
编写时分为两种情况,按照上图针对性使用
在[[]]
和(())
内也可以使用文字式比较符号,但是不推荐!
[ 2 -eq 1 ] && echo 1 || echo 0
[[ 2 > 10 ]] && echo 1 || echo 0(($num1<$num2)) && echo 1 || echo 0
不建议在正式工作中使用 [[]]
,因为它比较复杂,这会为开发带来很多麻烦
三种形式使用到的符号总结
- 整数加双引号的比较是对的。
[[]]
中用类似-eq
等的写法是对的,[[]]
中用类似>、<
的写法也可能不对,有可能会只比较第一位,逻辑结果不对。[]
中用类似>、<
的写法在语法上虽然可能没错,但逻辑结果不对,可以使用=、! =
正确比较。(())
中不能使用类似-eq
等的写法,可以使用类似>、<
的写法。
逻辑操作符
与或非运算,除了在 []
内可以使用字符式表达,其余两个可以使用对应的原始符号(如&&)
[ 1 -a 1 ] # 相当于 &&
[ 1 -o 1 ] # 相当于 ||
[ 1 ! 1 ] # 相当于 !
区别总结
if 语句
# 基础判断语句
# if开头,then衔接,fi结尾
if <条件表达式>then指令
fi# 双分支结构
if <条件表达式>then指令集1
else指令集2
fi# 多分支结构
if <条件表达式1>then指令1
elif <条件表达式2>then指令2
else指令3
fi
除此之外,if 还可以结合 测试表达式test、[]、[[]]、(())
作为判断条件使用
Shell 函数
基础执行
shell 中定义函数有三种办法
# 标准格式
function demo1(){}# 有function修饰的情况下可不写小括号
function demo2{}# 无function修饰必须要有小括号
demo3(){}
特别注意,由于 ubuntu 中 sh 和 bash 相互冲突的关系,执行脚本时务必使用 bash 命令,否则当你使用 function 定义函数的时候会一直报错!!!