SHELL命令-常用表达式


前置知识准备

## if简单语句
`&&` 如果是"前面", 则"后面"
`||` 如果不是"前面", 则"后面"

## 测试指令
1. 使用 `test expression`  指令测试
2. 使用 `[ expression ]`   指令测试 括号两端必须要有空格
3. 使用 `[[ expression ]]` 指令测试 括号两端必须要有空格
  • [[[的区别

    • 区别一
      1.在[中使用逻辑运算符,需要使用-a(and)或者-o(or);
      2.在[[中使用逻辑运算符,需要使用&&或者||
    • 区别二
      1.[是shell命令,在它包围的表达式是它的命令行参数,所以串比较符><需要转义,否则就变成io重定向了;
      2.[[是shell关键字,不会做命令行扩展,所以<和>不需要进行转义
      3.[[语法相对严格,如在[中可以用引号括起操作付,[[则不行。如if [ "-z" "ab" ]
    • 区别三
      [[可以做算术扩展,[则不行。如if [[ 11+1 -eq 100 ]],而if [ 11+1 -eq 100 ]则会报错

举例

# 文件存在时,则执行echo
test -e filename && echo "filename is exists"
[ -e filename ] && echo "filename is exists"

# 文件不存在时,执行echo
test -e filename || echo "filename is not exists"
[ -e filename ] || echo "filename is not exists"

文件表达式

[ -d FILE ] # 如果`FILE`存在且是一个目录则为真
[ -e FILE ] # 如果`FILE`存在则为真
[ -f FILE ] # 如果`FILE`存在且是一个普通文件则为真
[ -r FILE ] # 如果`FILE`存在且是可读的则为真
[ -w FILE ] # 如果`FILE`如果`FILE`存在且是可写的则为真
[ -x FILE ] # 如果`FILE`存在且是可执行的则为真
[ -s FILE ] # 如果`FILE`存在且大小不为0则为真
[ -h FILE ] # 如果`FILE`存在且是一个符号连接则为真(如软链接)
[ -L FILE ] # 如果`FILE`存在且是一个符号连接则为真(如软链接)
# [ -a FILE ] # 如果`FILE`存在则为真
# [ -b FILE ] # 如果`FILE`存在且是一个块特殊文件则为真
# [ -c FILE ] # 如果`FILE`存在且是一个字特殊文件则为真
# [ -g FILE ] # 如果`FILE`存在且已经设置了SGID则为真
# [ -k FILE ] # 如果`FILE`存在且已经设置了粘制位则为真
# [ -p FILE ] # 如果`FILE`存在且是一个名字管道(F如果O)则为真
# [ -t FD ]   # 如果文件描述符`FD`打开且指向一个终端则为真
# [ -u FILE ] # 如果`FILE`存在且设置了SUID (set user ID)则为真
# [ -O FILE ] # 如果`FILE`存在且属有效用户ID则为真
# [ -G FILE ] # 如果`FILE`存在且属有效用户组则为真
# [ -S FILE ] # 如果`FILE`存在且是一个套接字则为真
[ FILE1 -nt FILE2 ] # 如果`FILE1`比`FILE2`新,或者`FILE1`存在且`FILE2`不存在则为真
[ FILE1 -ot FILE2 ] # 如果`FILE1`比`FILE2`要老, 或者`FILE2`存在且`FILE1`不存在则为真
# [ FILE1 -ef FILE2 ] # 如果`FILE1`和`FILE2`指向相同的设备和节点号则为真

整数变量表达式

[ 1 -eq 1 ] && echo "等于"
[ 1 -ne 1 ] || echo "不等于"
[ 1 -gt 1 ] || echo "大于"
[ 1 -ge 1 ] && echo "大于等于"
[ 1 -lt 1 ] || echo "小于"
[ 1 -le 1 ] && echo "小于等于"

字符串变量表达式

[ -z STRING ]               # "STRING"的长度为零则为真
[ -n STRING ] or [ STRING ] # "STRING"的长度为非零 non-zero则为真
[ STRING1 == STRING2 ]      # 如果2个字符串相同 "="may be used instead of "=="for strict POSIX compliance则为真
[ STRING1 != STRING2 ]      # 如果字符串不相等则为真

逻辑表达式

表达式与前面的= != -d –f –x -ne -eq -lt等合用
逻辑符号就正常的接其他表达式,没有任何括号( ),就是并列
注意:逻辑与-a与逻辑或-o很容易和其他字符串或文件的运算符号搞混了

# 逻辑非 !                    条件表达式的相反
if [ ! 表达式 ]
if [ ! -d $dir ]             如果不存在目录$dir
 
# 逻辑与 –a                   条件表达式的并列
if [ 表达式1  –a  表达式2 ]
 
# 逻辑或 -o                   条件表达式的或
if [ 表达式1  –o 表达式2 ]

文章作者: darebeat
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 darebeat !
 上一篇
R语言基础知识 R语言基础知识
R语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析、绘图、数据挖掘。
2014-11-15
下一篇 
SHELL命令-find SHELL命令-find
Linux从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件,并可以对其进行相关的操作。
2014-07-10
  目录