우분투 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.