22、shell编程-测试

条件测试命令

条件测试:判断需求是否满足,有测试过程来实现

实现评估布尔申明,以便在条件性环境下执行

命令若执行为真,则状态码变量$?返回0

命令若执行为假,则状态码变量$?返回1

条件测试命令:

test  表达式

      [空格 表达式  空格] 和test等价,建议使用[]

      [[空格  表达式(支持正则) 空格 ]]

变量测试

[ -v  NAME ] 判断变量是否定义

22、shell编程-测试

[ -R NAME ] 判断变量是否定义并且被引用 ;bash 4.4新特性

22、shell编程-测试

22、shell编程-测试

数值测试

-eq 是否等于  

-ne 不等于

-gt  大于

-lt  小于

-ge 大于等于

-le 小于等于

22、shell编程-测试

22、shell编程-测试

字符串测试

test和[]方式

-z NAME 字符串是否为空,没定义或空为真,不空为假

22、shell编程-测试

-n NAME 字符串是否不空,不空为真,空为假    NAME等同

22、shell编程-测试

NAME1 = NAME2 是否等同,=前后有空格

22、shell编程-测试

22、shell编程-测试

NAME1 != NAME2 是否不能等同

22、shell编程-测试

 > ascii码是否大于ascii码

 < 是否小于

[[ ]] 用法:建议需使用正则或通配符才使用

      == 通配符方式

22、shell编程-测试

22、shell编程-测试

      =~ 扩展正则表达式方式

22、shell编程-测试

22、shell编程-测试

22、shell编程-测试

IP正则表达式 ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5]) 包含 0.0.0

文件测试

存在性测试

 -a file :同-e 是否存在

22、shell编程-测试

 -e file :文件存在性测试,存在为真,不存在为假

 -b file :文件是否是块文件

 -c file :是否是字符设备文件

 -d file :是否是目录文件

22、shell编程-测试

22、shell编程-测试

 -f file : 是否是普通文件

 -h file 或 -L file : 是否是符号链接文件

22、shell编程-测试

 -p file : 是否为命名管道文件

 -s file :是否为套接字文件

文件权限测试

 -r file :是否存在且可读

 -w file :是否可写

 -x file :是否可执行

 -u file :是否存在且拥有suid权限

 -g file :是否存在且拥有sgid权限

 -k file :是否存在且拥有sticky权限

注意:最终结果由用户对文件的实际权限决定,而为文件属性决定 比如root的权限

22、shell编程-测试

文件属性测试

 -s file 文件是否为非空

 -t fd 文件描述符是否在其他终端打开

 -N file 上一次读取是否被修改

 -O file 当前用户是否是文件属主

 -G file  当前用户组是否为文件属组

 FILE1 -ef  FILE2 file1是否是file2的硬链接

 FILE1 -nt  FILE2 file1是否新于file2

  FILE1 -of FILE2 file1是否旧于file2

(){}批量执行命令

 (command1;command2;...)和{空格command1;command2;...;}可以将多个命令组合在一起,批量执行

()会开启一个子shell,里面的变量就只能在子shell上运行

{}不会开启子shell,变量会影响当前环境

22、shell编程-测试

22、shell编程-测试

22、shell编程-测试

22、shell编程-测试

22、shell编程-测试

  $$ $BASHPID不同点

当您使用 $ $时,即使在子 shell 中,它也会存储创建它的父进程的进程 ID。但是 BASHPID 将存储当前进程 ID,即当在括号内调用时,它将存储子进程 ID。$PPID是相对于$$;意味着脚本文件下运行的进程ID。对于任何给定的脚本,当它运行时,它将只有一个“主”进程ID。无论您调用多少个子壳,​$$​将始终返回与该脚本关联的第一个进程ID。 ​BASHPID​将向您显示当前bash实例的进程ID.

{} 不会开启子shell

22、shell编程-测试

组合测试条件

方式一

[  expression1 -a expression2 ] 并且关系

[  expression1 -o expression2 ] 或关系

22、shell编程-测试

[[]]不支持

方式二

逻辑与 &&  逻辑或 ||

COMMAND1 && COMMAND2 #并且,短路与,代表条件性的AND THEN如果COMMAND1 成功,将执行COMMAND2,否则,将不执行COMMAND2

COMMAND1 || COMMAND2 #或者,短路或,代表条件性的OR ELSE如果COMMAND1 成功,将不执行COMMAND2,否则,将执行COMMAND2

! COMMAND #,取反

22、shell编程-测试

判断ip是否可ping通,只能先 && 在前   ||在后 不能对调

22、shell编程-测试

发表评论

相关文章