Ubuntu bash functions..syntax error: “(” ou “}” inesperado

9

Tentando executar algumas funções do bash, mas continuo encontrando erro de sintaxe: "(" inesperado. Tentei remover os colchetes, parênteses, etc etc etc ... nada parece funcionar.

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

#!/bin/bash
function hello () {
echo "Hello world"
}
James A
fonte
Como você está executando o script?
muru 9/10/16
Com permissões totais. sh hello.sh
James A
11
veja ryanstutorials.net/bash-scripting-tutorial/bash-functaions.php
Rinzwind
Eu li os tutoriais dele ontem à noite e os segui para ver onde estava errado ... mas ainda recebo um erro de sintaxe que é muito confuso. O shebang não deveria pelo menos tornar a função compatível, mesmo que o Ubuntu esteja executando um shell diferente?
James A
Problema resolvido. Eu estava usando $ sh hello.sh ---> eu recebo erro. Eu deveria estar usando ./hello.sh para executá-lo corretamente.
James A

Respostas:

18

Se você estiver executando o script sh hello.sh, o shell de interpretação não será o mencionado na linha shebang, mas /bin/shserá usado. No caso do Debian e Ubuntu, por padrão, isso será dash.

Portanto, para executar seu script corretamente com a bash, use um dos seguintes.

/bin/bash hello.sh

ou

chmod +x hello.sh
./hello.sh

Como alternativa, você também pode definir bashcomo /bin/sh.

dpkg-reconfigure dash 
Thomas
fonte
Obrigado por response.No idéia por que foi recusado votou: /
James A
2

Primeiro:

O erro de sintaxe é devido a (). Remova () do arquivo assim:

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

ou você pode simplesmente executar o seguinte comando para editar o arquivo para você:

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

Agora você deve conseguir executar o arquivo com o resultado desejado.


Alternativamente :

Você pode adicionar as linhas 2, 3 e 4 ao seu ~/.bashrcarquivo.

function hello () {
echo "Hello world"
}

Lembre-se, não use sudopara editar seu ~/.bashrcarquivo!

Depois de adicionar as linhas ao arquivo, execute o seguinte comando para reiniciar o bash ou "origine" seu arquivo .bashrc:

. ~/.bashrc

Agora você deve poder executar o comando helloe "Hello world" deve ser impresso no terminal.


Além disso:

Você pode editar o arquivo para dizer isso:

#!/bin/bash
echo "Hello world"

e nomeie o arquivo helloe salve o arquivo em /usr/local/bin.

Depois de fazer tudo isso, torne o arquivo executável executando o seguinte comando:

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

Agora você deve poder executar o comando helloe "Hello world" deve ser impresso no terminal.


Finalmente:

Uma terceira opção seria adicionar a seguinte linha ao seu ~/.bashrcarquivo:

alias hello='echo "Hello world"'

Em seguida, origine seu arquivo .bashrc usando o seguinte comando:

. ~/.bashrc 
mchid
fonte
Obrigado pelas respostas .... Tentei algumas e achei a resposta bastante simples. Em vez de usar $ sh hello.sh ... ./hello.sh funciona bem. Deve ser o shebang já foi escrito por mais ^^ #
A James #
Por que a resposta de Thomas foi votada menos, mas? Ele não estava correto?
James A
2

GNU Bash é o shell usado por padrão nos terminais do Ubuntu. Entretanto, quando os scripts são executados na inicialização do sistema, o traço é usado, pois é o traço que é / bin / sh.

Não vai funcionar ->

$ sh hello.sh

Vai funcionar ->

$./hello.sh

Problema resolvido

James A
fonte
1

De acordo com o seu script:

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

#call this function as follow:
hello   # Syntax Correct
hello() # Syntax Error
Benny
fonte