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,不懂啊!谢谢了! 展开
代码如下:
#!/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
#防止变量为空时,出现错误。你的写法因为加上了双引号,也是不会出错的。
展开全部
判断变量是否为空,千万别这么写
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
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
展开全部
首先$和(之间不应该有空格。其次!=和“”之间必须有空格。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询