Shell脚本执行报syntax error near unexpected token `('错误如何解决
错误原因
- 第一,shell变量赋值时等号两侧不允许有空格,你写的
EXIST= 'cat ...'中等号后带了空格,shell会错误将EXIST识别为待执行的命令,而非变量赋值。 - 第二,你错误使用单引号包裹需要执行的命令,要捕获命令输出需要用命令替换语法(反引号
`或者$()),同时外层单引号和awk语句的单引号发生了闭合冲突,导致awk代码里的(暴露给shell解析,触发语法错误。
你提到终端直接运行正常,大概率是你在终端直接执行了后面的管道命令,没有做变量赋值操作,所以没有触发赋值和引号冲突的问题。
修复方案
直接用$()做命令替换(可读性和兼容性都优于反引号),写法如下:
EXIST=$(cat Test.csv | sed "1 d" | awk -F, '{ if ($4 != "999.999.999.999" && $4 != "99.99.99.99") {print $1}}' | sort | uniq | wc -l)
可选优化
可以省略cat和sed,直接用awk跳过第一行,简化命令:
EXIST=$(awk -F, 'NR>1 { if ($4 != "999.999.999.999" && $4 != "99.99.99.99") {print $1} }' Test.csv | sort | uniq | wc -l)
内容的提问来源于stack exchange,提问作者beginner
相关产品推荐
相关产品推荐

