WTH-找不到命令-if语句-bash脚本

用户243760

我看到过类似的帖子,其中由于if语句中的空格错误而引发“找不到命令”错误。

我找不到空白错误。他们在哪?还有什么呢?

基本上,如果我不带标志地运行test.sh(下图),则终端会开始大喊粗鲁的行为,例如“找不到命令”。如果我使用标志,它会很好玩。我不想一直用旗标贿赂。长期健康对身体不好。

这是在test.sh中

verbose='false'
aflag=''
bflag=''
sflag=''
files=''
while getopts 'absf:v' flag; do
    case "${flag}" in
        a) aflag='true';;
        b) blag='true' ;;
        s) sflag='true' ;;
        f) files="${OPTARG}" ;;
        v) verbose='true';;
        *) error "Unexpected option ${flag}" ;;
    esac
done

# ======= Below this is where the error gets thrown
if "$sflag" ;
then
  echo "okay" ;
fi
# ======= end error throwing code 

echo "end" # this prints just fine

我运行上面的脚本

$ bash test.sh

然后我回来

test.sh: line 17: : command not found
end

有人能给我一些有关如何使bash表现合理的建议吗?

我正在使用Mac(我不知道这有什么区别)。

芒登

错误是您没有传递任何标志,因此整个while getopts循环永远不会运行,您的$sflag空白为空,因此,bash实际运行的是:

if ""; then echo "okay" ; fi

最简单的解决方案是将变量初始化为false:

verbose='false'
aflag='false'
bflag='false'
sflag='false'
files='false'
while getopts 'absf:v' flag; do
    case "${flag}" in
        a) aflag='true';;
        b) blag='true' ;;
        s) sflag='true' ;;
        f) files="${OPTARG}" ;;
        v) verbose='true';;
        *) error "Unexpected option ${flag}" ;;
    esac
done

# ======= Below this is where the error gets thrown
if "$sflag" ;
then
  echo "okay" ;
fi
# ======= end error throwing code 

echo "end" # this prints just fine

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章