SHELL 编程入门与提高(二)bash/pdksh中的表达式比较

pdksh/bash中提供了test命令用来比较两个表达式(字符串/数字/文件)等。test命令的语法如下:

test expression

或者[ expression ]

注意中括号中的expression的前后是空格,忽略这一点将会引起语法错误。

test命令支持的比较有字符串比较,数字比较,文件运算符和逻辑运算符。下面我们就来学习这些比较的用法。

1)字符串比较

比较字符串的运算符主要有:

x=y ——用来检查xy是否相等

x!=y ——用来检查xy是否不等

-n x ——用来检查字符串x的长度是否大于0x不是空字符串时为真

-z x ——用来检查字符串x长度是否为0x是空字符串时为真

如果两个字符串长度不同时,系统会先为较短的字符串后添加空格使得两者长度相同,而后完成比较。

2)数字比较

x -eq y ——检查是否xy相等

x -ne y ——检查是否xy不等

x -gt y ——检查是否x大于y

x -lt y ——检查是否x小于y

x -ge y ——检查是否x大于等于y

x -le y ——检查是否x小于等于y

3)针对文件的运算符

-e file ——文件file已经存在

-f file ——文件file是普通文件

-s file ——文件file大小不为0

-d file ——文件file是一个目录

-r file ——文件file对当前用户可以读取

-w file ——文件file对当前用户可以写入

-x file ——文件file对当前用户可以执行

-g file ——文件fileGID标志被设置

-u file ——文件fileUID标志被设置

-O file ——文件file是属于当前用户的

-G file ——文件file的组ID和当前用户相同

file1 -nt file2 ——文件file1file2更新

file1 -ot file2 ——文件file1file2更老

4)逻辑运算符

! 逻辑取非运算符,对一个逻辑表达式操作

-a 逻辑与运算符,对两个逻辑表达式操作

-o 逻辑或运算符,对两个逻辑表达式操作

下面举个简单的例子:

#!/bin/bash

if [ -x file1 -a -x dir1 ]; then

echo file1 and dir1 are executable

else

echo at least one of file1 or dir1 are not executable

fi

其中file1是当前目录下的一个文件,dir1是当前目录下的一个子目录。该文件判断file1dir1是否可执行。需要注意的是if和左中括号[中间有空格,[]里的表达式被空格包围,即[ expression ],否则会有语法错误。


你可能感兴趣的:(编程,shell,File)