linux shell控制语句
控制语句
常用的列出以下三种。小写的字符串表示控制命令,大写的表示其他意义。
1. if TEST then COMMANDS elif TEST then COMMANDS fi
2. for VAR in LIST do COMMANDS done
3. while TEST do COMMANDS done
COMMANDS,指命令的集合;VAR,指的是变量;TEST是测试语句,有几种形式:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 [ -a FILE ] 如果 FILE 存在则为真。
2 [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。
3 [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。
4 [ -d FILE ] 如果 FILE 存在且是一个目录则为真。
5 [ -e FILE ] 如果 FILE 存在则为真。
6 [ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。
7 [ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。
8 [ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。
9 [ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。
10 [ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。
11 [ -r FILE ] 如果 FILE 存在且是可读的则为真。
12 [ -s FILE ] 如果 FILE 存在且大小不为0则为真。
13 [ -t FD ] 如果 文件描述符 FD 打开且指向一个终端则为真。
14 [ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。
15 [ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。
16 [ -x FILE ] 如果 FILE 存在且是可执行的则为真。
17 [ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。
18 [ -G FILE ] 如果 FILE 存在且属有效用户组则为真。
19 [ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。
20 [ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。
21 [ -S FILE ] 如果 FILE 存在且是一个套接字则为真。
22 [ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1FILE2 does not则为真。 exists and
23 [ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。
24 [ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。
25 [ -o OPTIONNAME ] 如果 shell选项 “OPTIONNAME” 开启则为真。
26 [ -z STRING ] STRING的长度为零则为真。
27 [ -n STRING ] or [ STRING ] STRING的长度为非零 non-zero则为真。
28 [ STRING1 == STRING2 ] 如果2个字符串相同。 = may be used instead of == for strict POSIX compliance则为真。
29 [ STRING1 != STRING2 ] 如果字符串不相等则为真。
30 [ STRING1 < STRING2 ] 如果 STRING1 sorts before STRING2 lexicographically in the current locale则为真。
31 [ STRING1 > STRING2 ] 如果 STRING1 sorts after STRING2 lexicographically in the current locale则为真。
32 [ ARG1 OP ARG2 ] OP is one of -eq, -ne, -lt, -le, -gt or -ge.
33
34 [ ! EXPR ] 如果 EXPR 是false则为真。
35 [ ( EXPR ) ] 返回 EXPR的值。这样可以用来忽略正常的操作符优先级。
36 [ EXPR1 -a EXPR2 ] 如果 EXPR1 and EXPR2 全真则为真。
37 [ EXPR1 -o EXPR2 ] 如果 EXPR1 或者 EXPR2 为真则为真。
38
39 TEST也可以是有返回的命令。例如
40 if "hello world" | grep hello > /dev/null ; then echo "hello is here" ; fi
4. if举例:
if [ $count -lt $times ] then count=`expr $count + 1` echo $count fi
5. for举例:
for loop in `ls` do echo $loop done
6. while举例:
while [ $count -lt $times ] do count=`expr $count + 1` echo $count done
注意事项
1. 有些空格要小心,例如 if [ "$str" = "abc" ] 中,[ 和 ] 前后的空格不能去掉。
2. 变量的表达式,shell默认是按字符串进行的。所以:
a = 1
a = $a+1
那么a就变成了字符串"1+1",而不是2。要是他按数学运行,要使用expr命令。
a = 1
a = `expr $a + 1`
注意,此处+好前后的空格也不能去掉,否则"$a+"会被看出一个整体,所有解析会出错。