在linux中,[ ]可以作为条件判断式,结合if [ ];then.....fi使用。
在使用[]时,要注意,其中的每一部分都要用空格分开,中括号的前后都要有空格,if后面,then前面需要加空格!
以下面的程序为例:
1 #!/bin/bash
2 #该程序使用if ...,then...fi 做判断,程序设定如下:
3 #1.当执行一个程序的时候,这个程序会让用户选择Y或者N
4 #2.如果用户输入Y或y,就显示『OK,continue』
5 #3.如果用户输入n或N,就显示『Oh,interrupt!』
6 #4.如果不是Y/y/N/n之内的其它字符,就显示『I don't know what your choice is』
7
8 #2011/10/15 goku first release
9
10 read -p "please input(Y/N):"
11
12 if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then #if后面,then前面都有空格;中括号开始后紧跟空格,结束前紧跟空格;==前后也有空格
13 echo "OK,continue"
14 exit 0
15 fi
16 if [ "$yn" == "N" ] || [ "$yn" == "n" ]; then
17 echo "oh,interrupt!"
18 exit 0
19 fi
20 #[ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK,continue" && exit 0
21 #[ "$yn" == "N" -o "$yn" == "n" ] && echo "Oh,interrupt!" && exit 0
22 echo "I don't know what your choice is" && exit 0
~
如果在运行中出现下面的问题:
[: 15: y: unexpected operator
[: 15: y: unexpected operator
[: 19: y: unexpected operator
[: 19: y: unexpected operator
I don't know what your choice is
一般可能由以下几点原因造成的:
1.空格出现问题;
2.文件的第一行使用的是『#!/bin/sh』,应该是使用『#!/bin/bash』;
3.可能是使用:『sh 实例名』 运行的,应该要直接运行。也就是『chmod +x 实例名』,接着使用『./实例名』。
如果出现下面的问题:
./sh10.sh: 第 9 行: [: : 期待一元表达式
./sh10.sh: 第 13 行: [: : 期待一元表达式
./sh10.sh: 第 17 行: [: : 期待一元表达式
./sh10.sh: 第 21 行: [: : 期待一元表达式
则是由于中括号判断式中『==』前后没有空格导致的。
笔者在使用中,是因为使用了『#!/bin/sh』,害得我检查了半天!