在shell脚本中缺少“))”

问题描述 投票:1回答:2

我真的很抱歉我是shell脚本中的总菜鸟,我在互联网上看了一眼,但我找不到答案

=> / home / bee / Scripts / chkbsh:11:/ home / bee / Scripts / chkbsh:语法错误:缺少'))'

#!/bin/sh
for file in $((gawk '/^#!.*( |[/])sh/{printf "%s\0", FILENAME} {nextfile}' /usr/bin/* 2>/dev/null) | xargs -0); do
checkbashisms "$file" >/dev/null 2>&1
if [ "$?" -gt 0 ]
then
    sed -i 's:^#!.*/bin/sh:#!/bin/bash:' "$file";
    echo "$file" has been processed!
fi
done
echo ":3"

如果我在#!/ bin / bash中更改#!/ bin / sh,一切都还可以

shell dash-shell
2个回答
1
投票

你有两个括号,但有两个单括号。在第一个(之后放置一个空格,如下所示:

for file in $( (gawk '/^#!.*( |[/])sh/{printf "%s\0", FILENAME}
              ^ there

顺便说一下,用ShellCheck测试你的脚本总是很好的建议,这样你就可以很容易地发现上面的错误。


-2
投票

尝试

for file in `gawk '/^#!.*( |[/])sh/{printf "%s\0", FILENAME} {nextfile}' /usr/bin/* 2>/dev/null | xargs -0`; do
checkbashisms "$file" >/dev/null 2>&1
© www.soinside.com 2019 - 2024. All rights reserved.