【问题标题】:syntax error: unexpected end of file trying to run a simple bash script语法错误:试图运行简单 bash 脚本的文件意外结束
【发布时间】:2023-11-15 20:54:01
【问题描述】:

我真的看不出我的脚本有什么问题。我考虑过缺少引号或其他语法错误。一定有什么我错过了。这是一个非常简单的while循环脚本...

#!/bin/bash
c=1
while [ $c -le 5 ]
do
    echo "Welcone $c times"
    c=$(( c++ ))
done

我应该提到我正在 Windows 7 上的 cygwin 中运行 bash。

感谢您的帮助

【问题讨论】:

  • 会不会是一个奇怪的 Windows 空白字符?我尝试在 Linux 和 got the following output 中运行它。
  • 您是否使用 Windows 编辑器(如记事本)来创建此文件?如果是这样,您可能遇到了终端问题。尝试使用dos2unix 对其进行转换(并阅读手册页,它会覆盖其输入)。
  • 可能是。我想我只是不会想太多,我会尝试在 linux 中运行它。 (显然,我无法在带有 sudo apt-get 的 Windows 中安装 dos2unix ...如果您有解决方法,我将不胜感激^ ^)
  • 在 Windows 上使用 Notepad++。它具有行尾设置(和语法突出显示等)。
  • tr -d '\r' < your-script.sh > temp.sh; mv temp.sh your-script.sh

标签: bash cygwin eof


【解决方案1】:

变化:

c=$(( c++ ))

(( c=c+1 ))

当 Bash 看到: (( var)) 时,它会尝试对内容“做一些数学运算”...在这种情况下 'c++' == empty string == '0';由于第一次分配,c 将始终等于“1”...

来自我的 Linux 系统上的 Bash 手册页(您可能需要为 Cygwin 查看此手册 - 可能会有所不同...):

((表达式)) 表达式根据下面算术评估中描述的规则进行评估。如果表达式的值为非零,则返回状态为0;否则返回状态为 1。这完全等价于 let "表达式"。

还有:

  id++ id--  
          variable post-increment and post-decrement  
  ++id --id  
          variable pre-increment and pre-decrement  

经过一些测试,“预增量”似乎与您在此处所做的一样 - 请注意,您可能需要将“c”声明为整数:

typeset -i c=1
while [ $c -le 5 ]
do
    echo "Welcone $c times"
    c=++c
#    (( c=c+1 ))
done

【讨论】:

    最近更新 更多