无法获取简单的bash脚本

时间:2019-04-17 06:04:03

标签: linux bash shell scripting

我了解类似的问题,因此已多次提出。但是,我在这里找不到任何通常的嫌疑犯。

#!/bin/bash
myvar="test"
if [ "$myvar" == "test" ]
then
echo "Test mode"
fi

花了很多时间。谁能告诉我我想念什么?

我能够执行脚本,但无法提供相同的脚本。

来源bash: test.sh: line 7: syntax error: unexpected end of file

时出错
$ which bash
/bin/bash
$ bash --version
3.2.57(1)

我可以在另一台Mac上使用相同的软件。因此,在Mac上这几乎是错误的,但无法弄清楚到底是什么。另外,不仅上述脚本,而且任何源于“ if”条件的脚本我都无法获取。尝试过提到here的不同示例,相同的语法错误。

edit1:

$ file test.sh 
test.sh: Bourne-Again shell script text executable, ASCII text

edit2:

$ hexdump -C test.sh
    00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0a 6d 79 76 61  |#!/bin/bash.myva|
    00000010  72 3d 22 74 65 73 74 22  0a 69 66 20 5b 20 22 24  |r="test".if [ "$|
    00000020  6d 79 76 61 72 22 20 3d  3d 20 22 74 65 73 74 22  |myvar" == "test"|
    00000030  20 5d 0a 74 68 65 6e 0a  65 63 68 6f 20 22 54 65  | ].then.echo "Te|
    00000040  73 74 20 6d 6f 64 65 22  0a 66 69 0a              |st mode".fi.|
    0000004c

4 个答案:

答案 0 :(得分:1)

检查换行符差异或编码页面。 如果它像这样简单并且有Mac,请务必先检查

答案 1 :(得分:0)

正如其他用户所述,您可以检查换行符是否为LF,因为CRLF在Linux中将失败。如果转换脚本,则应将其修复。您可以安装一个将CRLF转换为LF的工具:

dos2unix test.sh

关于货源,不确定这是否可以帮助您解决问题。假设未从bash调用来源为test.sh的包装器脚本...

#!/bin/sh
. ./test.sh

... if语句将失败,因为bourne shell不支持'==',但是如果将其更改为...

#!/bin/bash
myvar="test"
if [ "$myvar" = "test" ]

...该脚本将无错误地获得。请注意,这取决于脚本的来源,shebang可能会被忽略

答案 2 :(得分:0)

好的,终于找到了问题。

我删除了.bashrc文件并正常工作。似乎.bashrc中的某些东西弄乱了。

$ source test.sh
Test mode

谢谢大家。

答案 3 :(得分:0)

好的。 10个月后,我妻子帮我调试了这个问题。

我在.bash_profile alias fi='firebase init'中有一个别名

别名 fi 使bash与 if 语句混淆。