全部博文(471)
分类: LINUX
2013-02-21 20:08:21
二、条件:
条件表达式用于 [[ 复合命令以及内建命令 test 和 [ 中,用来测试文件属性,进行字符串和算术比较。
基本格式:
test expression
expression为test命令构造的表达式。
这里expression是test命令可以理解的任何有效表达式,该简化格式将是读者可能会踫见的最常用格式
返回值:
test命令或者返回0(真)
或者返回1(假).
test可理解的表达式类型分为四类:
注意:在使用"["简写test时,左中括号后面的空格和右括号前面的空格是必需的,如果没有空格,Shell不可能辨别表达式何时开始何时结束.
也就是说
test option file
可以全部改写成:
[ option file ]
例如:
test –w File
改写成
[ –w File ]
【示例】
//判断第一个参数是否为空字符串,不空则打印
if test -n "$1"
then
echo "$1"
fi
测试,放到文件当中
#!/bin/sh
if test -n "$1"
then
echo "$1"
fi
执行
chmod +x test.sh
./test.sh
对于我们写程序来说,无论选择结构和循环结构都离不开条件。
C语言的条件主要由运算符组成的各类表达式组成,条件的组成非常灵活。
而shell的条件一般分为三类。其中的文件状态条件都是系统设置好的,只有记住才能够利用好。
2.1.文件状态的条件
1. file1 -ef file2 file1和file2有相同的设备和相同节点号。
2. file1 -nt file2 file1比file2修改时间更晚。
3.file1 -ot file2 file1比file2修改时间更早
4. -b file1 file1存在并且是块设备
5. -c file1 file1存在并且是字符设备
6. -d file1 file1存在并且是目录
7. -e file1 file1存在
8. -f file1 file1存在并且是普通文件
9. -g file1 file1存在并且有组ID
10. -h file1 file1存在并且是软链接文件
-L file1
11. -G file1 file1存在并且拥有者所在的组也存在
12. -k file1 file1存在并且粘滞位已设置
13. -O file1 file1存在并且拥有者也存在
14. -p file1 file1存在并且是管道文件
15. -s file1 file1存在并且是非空文件
16. -S file1 file1存在并且是进程
17. -t file1
18. -u file1 file1存在并拥有者的ID位已设置。
19. -w file1 file1存在并可写
20. -x file1 file1存在并可执行
2.2.字符串的条件
C语言中字符串的比较是通过strcmp(str1,str2) 用函数实现字符串比较
而Shell则比较简单:
1. -z string:字符串为空串时返回真
2. -n string: 不为空串
3. str1 = str2 : 相等
4. str1 != str2: 不相等时返回真
5. str1
6. str1>str2:
2.3.有关数值的条件
C语言中数值比较,是通过算术运算符(> < =等)实现,而shell利用了一些单词缩写实现。
int1 -eq int2 等于
-ne 不等于
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
2.4、复杂逻辑判断
-a 与
-o 或
! 非