linux的中括号条件判断式易出现的问题及解决方法

在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
~

如果在运行中出现下面的问题:

please input(Y/N):y
[: 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』,害得我检查了半天!

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页