shell 脚本错误:语法错误:“(”意外

shell 脚本错误:语法错误:“(”意外

我已经检查了之前关于此错误的帖子。仍然没有让解决方案发挥作用。这是我的 bash 脚本。有人可以帮我解决这个问题吗?我用过https://www.shellcheck.net/查看任何错误。我没有找到。

错误:

Dockerfunctiontest.sh: 2: Dockerfunctiontest.sh: Syntax error: "(" unexpected

脚本:

#!/bin/bash
function BuildSimpleContainer ()
{
docker search mariadb
docker pull mariadb:latest
docker run --name mariadbtestfour -e MYSQL_ROOT_PASSWORD=mypass -d mariadb --log-bin --binlog-format=MIXED
docker exec -it mariadbtest bash
apt-get -qq update
apt-get -qq -y install curl
apt-get -qq -y install wget
apt-get update
apt-get install apt-transport-https
apt-get update
cd /home
mkdir mdsd
cd mdsd/
wget '<blob url to pfx file>'
echo "certififcate Downloaded"
wget '<blob url file1>'
echo "file1 Downloaded"
wget 'blob url file2'
echo "file2 Downloaded"
}   
BuildSimpleContainer

答案1

我的猜测是,您不会将此脚本作为 Bash 脚本运行,而是使用其他一些不接受此语法的 shell 运行。例如。sh

正如您在 Shellcheck 中看到的,以及man我的 Debian 上的 Bash 所证实的,以下语法是正确的:

name () compound-command [redirection]
function name [()] compound-command [redirection]

您正在使用上面两个中的第二个,您的compound-command内容是大括号中的内容{...}。就目前而言,这很好man bash。但随后,也有人反对这种结构,例如约翰·穆恩评论中的链接在另一个答案下面。并且在格雷格维基的链接再次在那个答案中。

回到你的问题,考虑到脚本的名称,即Dockerfunctiontest.sh,我可能认为你看不到sh和之间有太大区别bash。可能您使用以下命令运行脚本:

sh Dockerfunctiontest.sh

虽然使用以下任一方式运行它是合理的:

bash Dockerfunctiontest.sh

或者

./Dockerfunctiontest.sh

最后一个根据脚本中的第一行选择解释器,即:

#!/bin/bash

虽然脚本中指定的解释器是 Bash,但为什么不以正确的方式命名文件呢?

Dockerfunctiontest.bash

未来会少一些混乱。

答案2

这很简单!只需从声明中删除 (and并重试,如下所示)“function foo() {}”和“foo() {}”之间的区别说。

相关内容