首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shell脚本错误:语法错误:"(“意外”)

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

Unix & Linux用户
提问于 2018-02-26 19:24:29
回答 2查看 12.6K关注 0票数 4

我已经检查了上一篇关于此错误的文章。仍然没有得到解决办法的工作。这是我的bash脚本。有人能帮我解决这个问题吗。我已经使用https://www.shellcheck.net/看到任何错误。我没有找到任何东西。

错误:

代码语言:javascript
复制
Dockerfunctiontest.sh: 2: Dockerfunctiontest.sh: Syntax error: "(" unexpected

脚本:

代码语言:javascript
复制
#!/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
EN

回答 2

Unix & Linux用户

发布于 2018-02-26 20:13:47

我的猜测是,您不以Bash脚本的形式运行此脚本,而是使用其他shell,它不接受这种语法。例如:sh

正如您在Shellcheck中所看到的,正如Bash在我的Debian上的man所确认的,这个语法是正确的:

代码语言:javascript
复制
name () compound-command [redirection]
function name [()] compound-command [redirection]

您正在使用上述两种方法中的第二种方法,您的compound-command{...}大括号的内容。就man bash的情况而言,这是很好的。但是,也有反对这种结构的声音,就像在另一个答案下面的约翰·穆恩评论中的链接中。在指向Greg的Wiki的链接中,这个答案又出现了。

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

代码语言:javascript
复制
sh Dockerfunctiontest.sh

虽然使用以下两种方法运行它是合理的:

代码语言:javascript
复制
bash Dockerfunctiontest.sh

代码语言:javascript
复制
./Dockerfunctiontest.sh

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

代码语言:javascript
复制
#!/bin/bash

当脚本中命名的解释器是Bash时,为什么不以正确的方式命名文件呢?

代码语言:javascript
复制
Dockerfunctiontest.bash

未来不那么混乱了。

票数 8
EN

Unix & Linux用户

发布于 2022-03-07 12:44:35

很简单!只需从声明中删除(),然后再试一次,就像“函数foo(){}”与“foo(){}”的区别所说的。

票数 -1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/426778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档