我已经检查了之前关于此错误的帖子。仍然没有让解决方案发挥作用。这是我的 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() {}”之间的区别说。