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

我运行这段代码出现了错误,不知道怎么处理,好像是括号的问题代码如下:#!/bin/bash#program:#usingnetstatandgreptodetectwww... 我运行这段代码出现了错误,不知道怎么处理,好像是括号的问题
代码如下:
#!/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,不懂啊!谢谢了!
展开
 我来答
hixtao
推荐于2018-02-27 · TA获得超过1099个赞
知道小有建树答主
回答量:468
采纳率:85%
帮助的人:323万
展开全部
  清木,我想告诉你,你完善后的代码,比你完善之前错得更多。当然,也不是大错。
  假设你完善后的脚本名为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            
  #防止变量为空时,出现错误。你的写法因为加上了双引号,也是不会出错的。
  
百度网友91c72def2
2013-09-04 · 超过10用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:32.4万
展开全部
判断变量是否为空,千万别这么写
if [ "$testing" !="" ];

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

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

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

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

也可用用
详见博客http://blog.sina.com.cn/s/blog_56ae1d580100xo6p.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-09-03
展开全部
首先$和(之间不应该有空格。其次!=和“”之间必须有空格。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式