【问题标题】:for loop - bash script syntax errrorfor 循环 - bash 脚本语法错误
【发布时间】:2017-04-17 21:21:55
【问题描述】:

我是 unix 的初学者,这是我的第一个带有 if 语句的 for 循环。我收到一条错误消息,提示 syntax error near unexpected token 'then'。请你帮我解决这个问题。我做错了什么。

for file in $@
do
    if [[ ! -f $@ ]]
    then
           echo "Error. File does not exist."
           exit $ERROR_NO_FILE

    elif
    then
           chmod 755 $file
           echo "File permissions have been changed."
           exit $SUCCESS
    fi
done

【问题讨论】:

  • [[ ! -f $@ ]]?诶? -f 不能接受任意数量的参数,并且您不知道 $@ 将扩展为多少。你想要[[ ! -f "$file" ]](由于[[ ]] 的副作用,那里没有可接受的引用,尽管它仍然没有伤害)。
  • 另外,你想要for file in "$@"chmod 755 "$file"等; - 事实上,这将严重破坏带有空格的文件名。通过shellcheck.net 运行您的代码并修复它找到的内容。
  • 不要以使已有答案无效的方式更改您的问题
  • 我想知道为什么我必须编辑答案以确保正确性。现在我知道了,并恢复到旧版本。对不起!
  • 不要写for f in $@。报价很重要。它应该是for f in "$@"; do...for f; do ...,除非您有一个非常特殊的用例并且知道其中的区别并且您实际上想要一个不带引号的$@。在这种情况下,您需要添加注释,准确解释不寻常用法的动机。

标签: bash shell unix command


【解决方案1】:

中间多了一个elif/then。尝试将其替换为 else

       exit $ERROR_NO_FILE

else
       chmod 755 $file

【讨论】:

  • @pogba123,因为你还有多余的then;你没有完全按照这个答案告诉你的去做。
猜你喜欢
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 2018-01-05
相关资源
最近更新 更多