test命令是内部命令

- test的语法
- test 条件表达式
- [ 条件表达式 ]
-
- test 选项 文件
- -d :判断是否是目录
- -f :判断是否是普通文件
- -b :判断是否是块设备
- -c :判断是否是字符设备
- -e :判断是否存在 ##建议不使用
- -e :判断是否存在 ##好用,建议使用
- -r :判断是否有读的权限 ##好用
- -w :判断是否有写的权限 ##好用
- -x :判断是否有执行的权限 ##好用
test的用法


中括号的用法
注意-e和-a的区别,在于取反,建议使用-e即可

总结:test主要用于判断文件是否存在,[]也有这样的用处,所以常还是使用[],test不常用
- 整数的比较判断使用英文:
- -eq :表示等于
- -ne :表示不等于
- -gt :表示大于
- -ge :表示大于等于
- -lt :表示小于
- -le :表示小于等于
案例一:判断boot分区的使用率是否够用

案例二:比较两个变量的大小

- = : 表示字符串相同
- != :表示字符串内容不相同
- -z :表示字符串内容为空
- -n :表示字符串存在
- 语法格式:
- [ 字符串1 = 字符串2 ] ##判断两个字符串是否相同
- [ 字符串1 != 字符串2 ] ##判断两个字符串是否不相同
- [ -z 字符串 ] ##判断字符串是否为空或是否存在,(存在且空也为不存在)
案例一:判断变量是否有值


案例二:借助环境变量,判断用户是否存在

- 短路运算
- 与:&&(相当于电路串联)
- 格式1:[判断1] && [判断2]
- 格式2:命令1 && 命令2
- ##表示需要命令1和命令2都为真,才为真,真的意思是$?为0
-
- ##执行逻辑:如果命令1为真,继续执行命令2,如果命令1为假,没必要执行命令2
-
-
- 或:|| (相当于电路并联)
- 格式1:[判断1] || [判断2]
- 格式2:命令1 || 命令2
- ##表示需要命令1和命令2其中一个为真,就为真,真的意思是$?为0
-
- ##执行逻辑:如果命令1为真,没必要执行命令2;如果命令1为假,执行命令2
合并用法:只需要记住一个
命令1 && 命令2 ||命令3:特殊用法,表示判断命令1执行结果,正确执行命令2,错误执行命令3
- #!/bin/bash
- read -p "请输入想测试的ip地址:" ip
- ping -c 3 -W2 $ip &>/dev/null && echo "$ip is online" || echo "$ip is offline"



-a或&&:逻辑与,表示而且的意思,全真为真
-o或||:逻辑或,表示或,一真为真
!:逻辑否
在条件表达式中是可以相互转换的,但是命令序列,不能变换
格式1:[判断1] && [判断2] (可以)
格式2:命令1 && 命令2 (不可以)

- 下面哪些语法是错误的:
- [root@localhost opt]#[ $a -ne 12 ]&& [ $a -gt 5 ];echo $?
- [root@localhost opt]#[ $a -ne 12 -a $a -gt 5 ];echo $?
- [root@localhost opt]#[[ $a -ne 12 && $a -gt 5 ]];echo $?
- [root@localhost opt]#[ $a -ne 12 && $a -gt 5 ];echo $? ##错误,需要双中括号
- [root@localhost opt]#[ $a -ne 12 ] -a [ $a -gt 5 ];echo $? ##错误,不能这样使用
-

产生随机数,测试运气

- [[ expression ]] 用法
- == 左侧字符串是否和右侧的PATTERN相同
- 注意:此表达式用于[[ ]]中,PATTERN为通配符
-
- =~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
- 注意: 此表达式用于[[ ]]中;扩展的正则表达式

总结:注意使用的语法,可以理解为双中括号可以支持模糊匹配
[root@localhost opt]#script=ping.sh
[root@localhost opt]#[[ $script == *.sh ]];echo $?(可以)
[root@localhost opt]#[[ $script =~ sh$ ]];echo $?(可以)

总结:
小括号类似于bash,在子bash中运行,不影响当前bash环境变量;
花括号类似于source,在当前的bash环境运行,会影响当前bash的环境变量的值;且需要以分号结尾


- if [ 判断 ]
- then
- 命令序列
- fi
- if [ 判断 ]
- then
- 命令序列1
- else
- 命令序列2
- fi
- if [ 判断1 ]
- then
- 命令序列1
- elif [ 判断2 ]
- then
- 命令序列2
- elif [ 判断3 ]
- then
- 命令序列3
- .....(可以有多个)
- else
- 命令序列4
- fi




- case 变量 in
- 条件1)
- 命令序列1
- ;;
- 条件2)
- 命令序列2
- ;;
- .....(可以添加多个条件)
- esac ##这就是case的反过来的字母


