shell程序,遇到错误syntax error near unexpected token ‘('怎么办 ?

我运行这段代码出现了错误,不知道怎么处理,好像是括号的问题
代码如下:
#!/bin/bash
#program:
# using netstat and grep to detect www services
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

testing=$ (netstat -tuln |grep ":80 ")
if [ "$testing" !="" ];then
echo "www is running in your system."
fi
我试着调了一下,换成了下面的代码就好使了,但不知道为什么,求解答!
改完的代码是:
#!/bin/bash
#program:
# using netstat and grep to detect www services
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

testing=$ \netstat -tuln |grep ":80 "\)
if [ "$testing" !="" ];then
echo "www is running in your system."
fi
有没有知道的啊?我是刚接触linux,不懂啊!谢谢了!

  清木,我想告诉你,你完善后的代码,比你完善之前错得更多。当然,也不是大错。
  假设你完善后的脚本名为test2.sh
  执行 bash -x  test2.sh
  你会发现testing=$ \netstat -tuln |grep ":80 "\)这一句,实际执行为
  + testing='$'
  + netstat -tuln
  + grep ':80 )'
  也就是说,这句命令在shell看来,一行命令变成了两部分:
  testing=$
  netstat -tuln |grep ‘":80 "\)’    #注意,这里grep 查找的是 :80 )而非:80
  最终,赋给testing的值不是 netstat -tuln |grep ":80 " 的输出结果。
  
  你会问我修改后的脚本为什么不报之前的错误。这是因为bash允许在同一行给多个变量
  赋值。它们在被解释时,被分作多行,分别执行。
  \n, \是bash中的转义字符 \n代表的就是n,所以\netstat就是netstat
  综上,testing=$ \netstat -tuln |grep ":80 "\) 等效于:
  testing=$
  netstat -tuln |grep ":80 )"
  两行命令都没有语法错误,所以不会报错。当然,这也与你的本意不符。
  
  你最初的脚本有两处错误
    1. testing=$ (netstat -tuln |grep ":80 ")
    $与左括号之间不能有空格
  等效命令:
  testing=`etstat -tuln |grep ":80 "`        
  # ` 在键盘上感叹号按键的左边,有波浪号的按键上
  
  2. if [ "$testing" !="" ];then
  等号与双引号之间有空格
  推荐的写法:
  if [ "x$testing" != "x" ];then            
  #防止变量为空时,出现错误。你的写法因为加上了双引号,也是不会出错的。
  

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-04
判断变量是否为空,千万别这么写
if [ "$testing" !="" ];

这么写是绝对会报错的
判断变量是否为空可以使用 -z
例如
if [ -z "$testing" ] ;

还有一种比较好理解的解决方法

在变量之后加任意字符。例如,要判断变量testing是否为80又要防止testing为空出错则这样写

if [ ${testing}x == 80x]
当testing为空时,表达式为80x == 80x,成立;
un为空,表达式为x == 80x ,则不成立。

也可用用
详见博客
第2个回答  2013-09-03
首先$和(之间不应该有空格。其次!=和“”之间必须有空格。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网