Ubuntu bash函数..语法错误:“(”或“}”意外


9

尝试运行一些bash函数,但始终遇到语法错误:“(”意外。我已尝试移除括号,括号等...似乎没有任何作用。

$ bash --version
GNU bash, version 4.3.46(1) release

#!/bin/bash
function hello () {
echo "Hello world"
}

您如何运行脚本?
大师

具有完全权限。sh hello.sh
詹姆斯A

1
参见ryanstutorials.net/bash-scripting-tutorial/bash-functaions.php
Rinzwind,2013年

昨晚我阅读了他的教程,然后跟随他们看我在哪里出错了...但是我仍然收到语法错误,这非常令人困惑。即使Ubuntu运行其他shell,shebang至少也不能使该功能兼容吗?
詹姆斯A

问题解决了。我正在使用$ sh hello.sh --->我得到了错误。我应该一直使用./hello.sh来正确运行它。
詹姆斯A

Answers:


18

如果您使用运行脚本sh hello.sh,则解释外壳将不是shebang行中提到的外壳,而是/bin/sh将使用它。如果是Debian和Ubuntu,则默认为dash

因此,要bash使用正确运行脚本,请使用以下任一方法。

/bin/bash hello.sh

要么

chmod +x hello.sh
./hello.sh

另外,您也可以将设置bash/bin/sh

dpkg-reconfigure dash 

谢谢您的答复。不知道为什么投票被否决:/
James A

2

第一:

语法错误是由于()引起的。从文件中删除(),如下所示:

#!/bin/bash
function hello {
echo "Hello world"
}

或者,您可以运行以下命令为您编辑文件:

sed -i 's/() //g' hello.sh

现在,您应该能够以所需的结果运行文件。


或者

您可以在~/.bashrc文件中添加第2、3和4行。

function hello () {
echo "Hello world"
}

记得, 不要使用它sudo来编辑~/.bashrc文件!

将行添加到文件后,运行以下命令以重新启动bash或“获取” .bashrc文件:

. ~/.bashrc

您现在应该可以运行命令了 hello并且应该在终端中打印“ Hello world”。


也:

您可以编辑文件以改为这样:

#!/bin/bash
echo "Hello world"

并命名文件 hello然后将其保存到/usr/local/bin

完成所有这些操作后,通过运行以下命令使文件可执行:

sudo chmod +x /usr/local/bin/hello

您现在应该可以运行命令了 hello并且应该在终端中打印“ Hello world”。


最后:

第三种选择是将以下行添加到~/.bashrc文件中:

alias hello='echo "Hello world"'

然后,使用以下命令来源.bashrc文件:

. ~/.bashrc 

谢谢您的回复。...我尝试了几次,发现答案很简单。而不是使用$ sh hello.sh ... .//hello.sh可以正常工作。它一定是shebang被改写过的^^
James A

为什么托马斯的答案被否决了?他不正确吗?
詹姆斯A

2

GNU Bash是Ubuntu终端默认使用的shell。但是,在系统引导时执行脚本时,将使用破折号,因为破折号是/ bin / sh。

无法工作->

$ sh hello.sh

会工作->

$./hello.sh

问题解决了


1

根据您的脚本:

#!/bin/bash
function hello () {
    echo "Hello world"
}

#call this function as follow:
hello   # Syntax Correct
hello() # Syntax Error
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.