Linux常用Shell脚本测试命令

Posted 白-胖-子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux常用Shell脚本测试命令相关的知识,希望对你有一定的参考价值。

条件测试

  • 判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成
  • 测试过程,实现评估布尔声明,以便用在条件性环境下进行执行
若真,则状态码变量 $? 返回0
若假,则状态码变量 $? 返回1

条件测试命令

  • test EXPRESSION test命令 后边接条件
  • [ EXPRESSION ] 中括号和test 等价,建议使用 [ ]
  • [[ EXPRESSION ]] 双中括号相关于增强版的 [ ], 支持[ ]的用法,且支持扩展正则表达式和通配符

数值测试

  • -eq 等于则为真
  • -ne 不等于则为真
  • -gt 大于则为真
  • -ge 大于等于则为真
  • -lt 小于则为真
  • -le 小于等于则为真

算术表达式数值字符串测试

  • == 等于则为真
  • != 不等于则为真
  • 大于则为真

  • = 大于等于则为真

  • < 小于则为真
  • <= 小于等于则为真

字符测试

  • = 等于则为真
  • != 不相等则为真
  • -z 字符串 字符串的长度为零则为真
  • -n 字符串 字符串的长度不为零则为真
  • == 左侧字符串是否和右侧的PATTERN相同
    注意:此表达式用于[[ ]]中,PATTERN为通配符
  • =~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
    注意: 此表达式用于[[ ]]中;扩展的正则表达式

文件测试

文件存在性测试

  • -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: 是否存在且可执行
  • -u FILE:是否存在且拥有suid权限
  • -g FILE:是否存在且拥有sgid权限
  • -k FILE:是否存在且拥有sticky权限

文件属性测试

  • -s FILE #是否存在且非空
  • -t fd #fd 文件描述符是否在某终端已经打开
  • -N FILE #文件自从上一次被读取之后是否被修改过
  • -O FILE #当前有效用户是否为文件属主
  • -G FILE #当前有效用户是否为文件属组
  • FILE1 -ef FILE2 #FILE1是否是FILE2的硬链接
  • FILE1 -nt FILE2 #FILE1是否新于FILE2(mtime)
  • FILE1 -ot FILE2 #FILE1是否旧于FILE2

变量测试

  • -v NAME 判断 NAME 变量是否定义
  • -R NAME 判断 NAME 变量是否定义并且是名称引用

组合测试条件

表达式组合条件测试

  • [ EXPRESSION1 -a EXPRESSION2 ]
    并且,EXPRESSION1和EXPRESSION2都是真,结果才为真
  • [ EXPRESSION1 -o EXPRESSION2 ]
    或者,EXPRESSION1和EXPRESSION2只要有一个真,结果就为
  • [ ! EXPRESSION ] 取反

说明: -a 和 -o 需要使用测试命令进行,[[ ]] 不支持

命令与或非条件测试

  • COMMAND1 && COMMAND2
    并且,短路与,代表条件性的AND THEN,如果COMMAND1 成功,将执行COMMAND2,否则,将不执行COMMAND2
  • COMMAND1 || COMMAND2
    或者,短路或,代表条件性的OR ELSE,如果COMMAND1 成功,将不执行COMMAND2,否则,将执行COMMAND2
  • ! COMMAND
    非,取反

举例

  • 判断输入为yes还是no
read -p "Please input yes or no: " input
[[ $input =~ ^([Yy][Ee][Ss]|[Yy])$ ]] && echo YES
[[ $input =~ ^([Nn][Oo]|[Nn])$ ]] && echo NO
  • 创建目录/backup,如果创建成功了则拷贝a.txt到/backup目录中去
    mkdir /backup && cp -a a.txt /backup
  • 检测/backup目录是否存在,如果不存在则创建
    [ -d /backup ] || mkdir /backup

以上是关于Linux常用Shell脚本测试命令的主要内容,如果未能解决你的问题,请参考以下文章

常用python日期日志获取内容循环的代码片段

轻度Linux服务器维护人员常用的Shell脚本命令

Linux下如何执行Shell脚本

Linux简介及常用命令使用5--linux shell编程入门

shell脚本简介及常用文本编辑命令

linuxshell 脚本执行的过程是怎样的?