シェルスクリプトエラー:構文エラー: '( '予期しない

シェルスクリプトエラー:構文エラー: '( '予期しない

このエラーについては、以前の投稿を確認しました。まだ解決策は機能していません。これは私の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スクリプトとして実行するのではなく、この構文を受け入れない別のシェルを使用しているようです。例えば。sh

Shellcheckで見ることができ、man私のDebianのBashで確認したように、次の構文は正しいです。

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

上記の2つのうち2番目を使用しており、compound-commandコンテンツは中括弧内にあります{...}。今は大丈夫ですman bash。しかし、この構造に対する反対意見もありました。John Moonでコメントしたリンク他の答えの下。そしてGregのWikiリンク再びその答えに。

あなたの質問に戻り、スクリプト名を見れば、つまりとの間に大きな違いはDockerfunctiontest.shないと思います。おそらく、次のようにスクリプトを実行したと思います。shbash

sh Dockerfunctiontest.sh

次のいずれかを使用して実行するのは合理的ですが、

bash Dockerfunctiontest.sh

または

./Dockerfunctiontest.sh

最後に、スクリプトの最初の行に基づいてインタプリタを選択します。

#!/bin/bash

スクリプトで指定されたインタプリタはBashですが、ファイル名を正しい方法で指定するのはどうでしょうか?

Dockerfunctiontest.bash

今後は混乱が減ります。

おすすめ記事