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

2024-12-25 09:46:20
推荐回答(3个)
回答1:

  清木,我想告诉你,你完善后的代码,比你完善之前错得更多。当然,也不是大错。
  假设你完善后的脚本名为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            
  #防止变量为空时,出现错误。你的写法因为加上了双引号,也是不会出错的。
  

回答2:

判断变量是否为空,千万别这么写
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

回答3:

首先$和(之间不应该有空格。其次!=和“”之间必须有空格。