우분투 bash 기능 .. 구문 오류 :“(”또는“}”예기치 않은


9

bash 함수를 실행하려고하지만 구문 오류가 계속 발생합니다 : "("예기치 않은. 대괄호, 괄호 등을 제거하려고 시도했지만 아무것도 작동하지 않는 것 같습니다.

$ bash --version
GNU bash, version 4.3.46(1) release

#!/bin/bash
function hello () {
echo "Hello world"
}

스크립트를 어떻게 실행하고 있습니까?
muru

모든 권한이 있습니다. sh hello.sh
James A

1
ryanstutorials.net/bash-scripting-tutorial/bash-functaions.php 참조
Rinzwind

어제 밤에 그의 자습서를 읽고 내가 어디로 잘못 가고 있는지 알기 위해 따라 갔지만 여전히 매우 혼란스러운 구문 오류가 발생합니다. 우분투가 다른 쉘을 실행하더라도 shebang이 기능을 호환 가능하게 만들어야합니까?
James A

문제 해결됨. 나는 $ sh hello.sh를 사용하고 있었다 ---> 오류가 발생했다. 나는 그것을 올바르게 실행하기 위해 ./hello.sh를 사용해야했습니다.
James A

답변:


18

로 스크립트를 실행하는 경우 sh hello.sh해석 쉘은 shebang 행에 언급 된 것이 아니라 /bin/sh사용됩니다. 데비안과 우분투의 경우 기본값은입니다 dash.

로 스크립트를 올바르게 실행 bash하려면 다음 중 하나를 사용하십시오.

/bin/bash hello.sh

또는

chmod +x hello.sh
./hello.sh

또는 당신은 또한 설정할 수 bash는 AS /bin/sh.

dpkg-reconfigure dash 

답장을 보내 주셔서 감사합니다. 왜이 투표에 참여했는지 모르겠습니다. : /
James A

2

먼저:

구문 오류는 () 때문입니다. 다음과 같이 파일에서 ()를 제거하십시오.

#!/bin/bash
function hello {
echo "Hello world"
}

또는 다음 명령을 실행하여 파일을 편집 할 수 있습니다.

sed -i 's/() //g' hello.sh

이제 원하는 결과로 파일을 실행할 수 있습니다.


대안 적으로 :

2, 3, 4 행을 ~/.bashrc파일에 추가 할 수 있습니다 .

function hello () {
echo "Hello world"
}

기억 하지 않는 사용 sudo하여 편집 할 ~/.bashrc파일을!

파일에 행을 추가 한 후 다음 명령을 실행하여 bash를 다시 시작하거나 .bashrc 파일을 "소스"하십시오.

. ~/.bashrc

이제 comand를 실행할 수 hello있고 "Hello world"가 터미널에 인쇄되어야합니다.


또한:

대신 파일을 편집하여 다음과 같이 말할 수 있습니다.

#!/bin/bash
echo "Hello world"

파일 이름을 지정하고 파일 hello을에 저장하십시오 /usr/local/bin.

이 모든 작업을 수행 한 후 다음 명령을 실행하여 파일을 실행 가능하게 만드십시오.

sudo chmod +x /usr/local/bin/hello

이제 comand를 실행할 수 hello있고 "Hello world"가 터미널에 인쇄되어야합니다.


드디어:

세 번째 옵션은 ~/.bashrc파일에 다음 줄을 추가하는 것입니다 .

alias hello='echo "Hello world"'

그런 다음 다음 명령을 사용하여 .bashrc 파일을 소싱하십시오.

. ~/.bashrc 

답변 주셔서 감사합니다 .... 나는 몇 가지 시도를하고 답변이 충분히 간단하다는 것을 알았습니다. $ sh hello.sh를 사용하는 대신 hello.sh ... ./hello.sh가 제대로 작동합니다. 그것은 쓰여진 것이어야합니다 ^^
James A

토마스의 대답이 내려진 이유는 무엇입니까? 그가 맞지 않았습니까?
James A

2

GNU Bash는 우분투 터미널에서 기본적으로 사용되는 쉘입니다. 그러나 시스템 부팅시 스크립트가 실행되면 / bin / sh 인 dash이므로 dash가 사용됩니다.

작동하지 않습니다->

$ sh hello.sh

작동합니다->

$./hello.sh

문제 해결됨


1

당신의 스크립트에 따르면 :

#!/bin/bash
function hello () {
    echo "Hello world"
}

#call this function as follow:
hello   # Syntax Correct
hello() # Syntax Error
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.