쉘 스크립트 오류: 구문 오류: '(' 예상치 못한

쉘 스크립트 오류: 구문 오류: '(' 예상치 못한

이 오류에 대해서는 이전 게시물을 확인했습니다. 아직까지 해결책이 작동하지 않았습니다. 이것은 내 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]

위의 두 가지 중 두 번째를 사용하고 있으며 compound-command콘텐츠는 중괄호 안에 있습니다 {...}. 지금은 괜찮습니다 man bash. 그러나 이 구조에 대한 반대 의견도 있었습니다.John Moon의 댓글에 있는 링크다른 답변 아래. 그리고Greg의 위키 링크다시 그 대답에.

귀하의 질문으로 돌아가서, 스크립트 이름을 보면, 즉 와 사이에 큰 차이가 Dockerfunctiontest.sh없다고 생각합니다 . 아마도 다음을 사용하여 스크립트를 실행했을 것입니다.shbash

sh Dockerfunctiontest.sh

다음 중 하나를 사용하여 실행하는 것이 합리적이지만:

bash Dockerfunctiontest.sh

또는

./Dockerfunctiontest.sh

마지막 것은 스크립트의 첫 번째 줄을 기반으로 인터프리터를 선택합니다.

#!/bin/bash

스크립트에 지정된 인터프리터는 Bash이지만 파일 이름을 올바른 방식으로 지정하는 것은 어떨까요?

Dockerfunctiontest.bash

앞으로는 혼란이 줄어들 것입니다.

답변2

이것은 매우 간단합니다! 명령문에서 및를 제거 (하고 아래와 같이 다시 시도하십시오.)"function foo() {}"와 "foo() {}"의 차이점설명하다.

관련 정보