Linux学习笔记:bash的算术运算及条件测试
原创
©著作权归作者所有:来自51CTO博客作者Ivan00745的原创作品,请联系作者获取转载授权,否则将追究法律责任
bash中的算术运算
- +,-,*,/,%,**
- 实现算术运算:
- let var=arithmetic expression(算术运算表达式)
- var=$[ 算术表达式 ]
- var=$(( 算术表达式 ))
- var=$(expr arg1 arg2 arg3 …)
- bash有内建的随机数生成器:$RANDOM
- 增强型赋值符号:
- +=,-=,*=,/=,%=
- 实现方式:let varOPERvalue
- 自增,自减:
条件测试
- 判断某需求是否满足,需要由测试机制来实现
- 专用的测试表达式需要由测试命令辅助完成测试过程
- 测试命令
- test EXPRESSION
- [ EXPRESSION ]
- [[ EXPRESSION ]]
- bash的测试类型:
- 数值测试:
- -gt:是否大于
- -ge:是否大于等于
- -eq:是否等于
- -ne:是否不等于
- -lt:是否小于
- -le:是否小于等于
- 字符串测试:
- ==:是否等于
- >:是否大于(ASCII码)
- <:是否小于(ASCII码)
- !=:是否不等于
- =~:左侧祖父穿是否能够呗右侧的PATTERN所匹配
- -z “STRING”:测试字符串是否为空,空为真,非空为假
- -n “STRING”:测试字符串是否不空,非空为真,空为假
- Note:用于字符串比较是用到的操作数都应该使用引号
- 文件测试:
- 存在性测试:
- -a FILE:效果同-e,但不鼓励使用
- -e FILE:文件存在性测试,存在为真,否则为假
- 存在性及类别测试:
- -b FILE:是否存在且为块设备文件
- -c FILE:是否存在且为字符设备文件
- -d FILE:是否存在且为目录文件
- -f FILE:是否存在且为普通文件
- -h FILE或-L FILE:存在且为符号链接文件
- -p FILE:是否存在且为命名管道文件
- -S FILE:是否存在且为套接字文件
- 文件权限测试:
- -r FILE:是否存在且可读
- -w FILE:是否存在且可写
- -x FILE:是否存在且可执行
- 文件特殊权限测试:
- -g FILE:是否存在且拥有sgid权限
- -u FILE:是否存在且拥有suid权限
- -k FILE:是否存在且拥有sticky权限
- 文件大小测试:
- 文件是否打开:
- -t fd:fd表示文件描述符是否已经打开且与某终端相关
- -N FILE:文件自从上一次被读取之后是否被修改过
- -O FILE:当前有效用户是否为文件属主
- -G FILE:当前有效用户是否为文件属组
- 双目测试
- FILE1 -ef FILE2:FILE1和FILE2是否只想同一个设备上的相同硬链接
- FILE1 -nt FILE2:FILE1是否新于FILE2
- FILE1 -ot FILE2:FILE1是否旧于FILE2
- 组合测试条件:
- 逻辑运算(两种方式):
- 第一种方式:
- COMMAND1 && COMMAND2
- COMMAND1 || COMMAND2
- !COMMAND
- 例如:[ -e FILE ] && [-r FILE]
- 第二种方式:
- EXPRESSION1 -a EXPRESSION2
- EXPRESSION1 -o EXPRESSION2
- !EXPRESSION
- Note:必须使用测试命令
bash自定义退出状态码
- exit [n]:自定义退出状态码
- 注意:脚本中一旦遇到exit命令,脚本会立即终止;终止状态码取决于exit命令后面的数字
- 注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码