报错1:-bash: ./xh_makekafka.sh: /bin/bash^M: bad interpreter: No such file or directory
原因:在非unix环境中编辑的shell脚本,传到unix环境中执行时就会报错
解决办法:
vim myinstall_cp
:set ff=unix
:wq
报错2:-bash: [[1: command not found
代码段:if [[$a -eq $b]]; then echo ‘ok’; else echo ‘ko’;fi
原因:[ ]前后要有空格
修改后:if [[ ${a} -eq ${b} ]]; then echo ‘ok’; else echo ‘ko’;fi
报错3: [: =: unary operator expected
代码段:if [ $STATUS == “OK” ];
then
echo “OK”
fi
解决办法:在条件表达式外再添加一层“[]”,就不会出错了,如下:
if [[
S
T
A
T
U
S
=
"
O
K
"
]
]
;
t
h
e
n
e
c
h
o
"
O
K
"
f
i
原因:是因为如果变量
S
T
A
T
U
S
值为空,那么条件表达式就成了
[
=
"
O
K
"
]
,显然
[
和
"
O
K
"
不相等并且缺少了
[
符号,所以报了这样的错误。当然不总是出错,如果变量
S
T
A
T
U
S
值不为空,程序就正常了,所以这样的错误还是很隐蔽的。或者,用下面的方法也能避免这种错误:
i
f
[
"
STATUS = "OK" ]]; then echo "OK" fi 原因:是因为如果变量STATUS值为空,那么条件表达式就成了 [ = "OK"] ,显然 [ 和 "OK" 不相等并且缺少了 [ 符号,所以报了这样的错误。当然不总是出错,如果变量STATUS值不为空,程序就正常了,所以这样的错误还是很隐蔽的。 或者,用下面的方法也能避免这种错误: if [ "
STATUS="OK"]];thenecho"OK"fi原因:是因为如果变量STATUS值为空,那么条件表达式就成了[="OK"],显然[和"OK"不相等并且缺少了[符号,所以报了这样的错误。当然不总是出错,如果变量STATUS值不为空,程序就正常了,所以这样的错误还是很隐蔽的。或者,用下面的方法也能避免这种错误:if["STATUS"x == "OK"x ]; then
echo
“OK”
fi。
当然,x也可以是其他字符。顺便提一点,shell中有没有双引号在很多情况下是一致的。