本文共 2632 字,大约阅读时间需要 8 分钟。
一、算术运算
bash中的算术运算:help let+, -, *, /, %取模(取余) , *(乘方)实现算术运算:(1) let var=算术表达式(2) var=$[算术表达式](3) var=$((算术表达式))(4) var=$(expr arg1 arg2 arg3 ...)(5) declare –i var = 数值(6) echo ‘算术表达式’ | bc乘法符号有些场景中需要转义, 如bash有内建的随机数生成器: $RANDOM(0-32767)echo $[$RANDOM%50] : 0-49之间随机数二、赋值
增强型赋值:+=, -=, *=, /=, %=let varOPERvalue例如:let count+=3自加3后自赋值自增,自减:let var+=1let var++let var-=1let var--三、逻辑运算
true, false1, 0与:1 与 1 = 11 与 0 = 00 与 1 = 00 与 0 = 0或:1 或 1 = 11 或 0 = 10 或 1 = 10 或 0 = 0非:!! 1 = 0 ! true! 0 = 1 ! false短路运算短路与第一个为0,结果必定为0第一个为1,第二个必须要参与运算短路或第一个为1,结果必定为1第一个为0,第二个必须要参与运算异或: ^异或的两个值,相同为假,不同为真四、条件测试
判断某需求是否满足,需要由测试机制来实现专用的测试表达式需要由测试命令辅助完成测试过程评估布尔声明,以便用在条件性执行中• 若真,则返回0• 若假,则返回1测试命令:• test EXPRESSION• [ EXPRESSION ]• [[ EXPRESSION ]]注意: EXPRESSION前后必须有空白字符条件性的执行操作符 根据退出状态而定,命令可以有条件地运行
• && 代表条件性的AND THEN
• || 代表条件性的OR ELSE例如:grep -q no_such_user /etc/passwd \|| echo 'No such user'No such userping -c1 -W2 station1 &> /dev/null \&& echo "station1 is up" \
|| (echo 'station1 is unreachable'; exit 1)station1 is up
五、test命令
长格式的例子:test "$A" = "$B" && echo "Strings are equal"test “$A” -eq “$B” && echo "Integers are equal"简写格式的例子:[ "$A" = "$B" ] && echo "Strings are equal"[ "$A" -eq "$B" ] && echo "Integers are equal"六、bash的数值测试
-v VAR变量VAR是否设置数值测试:-gt 是否大于-ge 是否大于等于-eq 是否等于-ne 是否不等于-lt 是否小于-le 是否小于等于七、bash的字符串测试
字符串测试:= 是否等于ascii码是否大于ascii码
< 是否小于!= 是否不等于=~ 左侧字符串是否能够被右侧的PATTERN所匹配注意: 此表达式一般用于[[ ]]中;扩展的正则表达式-z "STRING“ 字符串是否为空,空为真,不空为假-n "STRING“ 字符串是否不空,不空为真,空为假注意:用于字符串比较时的用到的操作数都应该使用引号
八、Bash的文件测试
存在性测试-a FILE:同-e-e FILE: 文件存在性测试,存在为真,否则为假存在性及类别测试-b FILE:是否存在且为块设备文件-c FILE:是否存在且为字符设备文件-d FILE:是否存在且为目录文件-f FILE:是否存在且为普通文件-h FILE 或 -L FILE:存在且为符号链接文件-p FILE:是否存在且为命名管道文件-S FILE:是否存在且为套接字文件九、Bash的文件权限测试
文件权限测试:-r FILE:是否存在且可读-w FILE: 是否存在且可写-x FILE: 是否存在且可执行文件特殊权限测试:-u FILE:是否存在且拥有suid权限-g FILE:是否存在且拥有sgid权限-k FILE:是否存在且拥有sticky权限十、Bash的文件属性测试
文件大小测试:-s FILE: 是否存在且非空文件是否打开:-t fd: fd 文件描述符是否在某终端已经打开-N FILE:文件自从上一次被读取之后是否被修改过-O FILE:当前有效用户是否为文件属主-G FILE:当前有效用户是否为文件属组十一、Bash的文件属性测试
双目测试:FILE1 -ef FILE2: FILE1是否是FILE2的硬链接FILE1 -nt FILE2: FILE1是否新于FILE2(mtime)FILE1 -ot FILE2: FILE1是否旧于FILE2十二、Bash的组合测试条件
第一种方式:COMMAND1 && COMMAND2 并且COMMAND1 || COMMAND2 或者! COMMAND 非如: [ -f “$FILE” ] && [[ “$FILE”=~ .*.sh$ ]]第二种方式:EXPRESSION1 -a EXPRESSION2 并且EXPRESSION1 -o EXPRESSION2 或者! EXPRESSION必须使用测试命令进行, [[ ]] 不支持示例[ -z “$HOSTNAME” -o $HOSTNAME "=="localhost.localdomain" ] \&& hostname www.magedu.com[ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab转载于:https://blog.51cto.com/1456850/2383249