web-dev-qa-db-fra.com

Ubuntu bash functions..syntax error: "(" ou "}" inattendu

Essayer de lancer quelques fonctions bash, mais je rencontre toujours une erreur de syntaxe: "(" inattendu. J'ai essayé de supprimer les crochets, les parenthèses, etc. etc ... rien ne semble fonctionner.

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

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

Si vous exécutez le script avec sh hello.sh, le shell interprétant ne sera pas celui mentionné dans la ligne Shebang, mais /bin/sh sera utilisé. Dans le cas de Debian et Ubuntu par défaut, ce sera dash.

Donc, pour exécuter votre script correctement avec un bash, utilisez l’une des méthodes suivantes.

/bin/bash hello.sh

ou

chmod +x hello.sh
./hello.sh

Sinon, vous pouvez également définir bash en tant que /bin/sh.

dpkg-reconfigure dash 
14
Thomas

Premier:

L'erreur de syntaxe est due à (). Supprimer () du fichier comme ceci:

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

ou vous pouvez simplement exécuter la commande suivante pour éditer le fichier pour vous:

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

Vous devriez maintenant pouvoir exécuter le fichier avec le résultat souhaité.


Alternativement:

Vous pouvez ajouter les lignes 2, 3 et 4 à votre fichier ~/.bashrc.

function hello () {
echo "Hello world"
}

Rappelez-vous, ne pas utilisez Sudopour éditer votre fichier ~/.bashrc!

Après avoir ajouté les lignes au fichier, exécutez la commande suivante pour redémarrer bash ou "source" votre fichier .bashrc:

. ~/.bashrc

Vous devriez maintenant pouvoir exécuter la commande helloet "Hello world" devrait apparaître dans le terminal.


aussi:

Vous pouvez éditer le fichier pour dire ceci à la place:

#!/bin/bash
echo "Hello world"

et nommez le fichier helloet enregistrez-le sous /usr/local/bin.

Après tout cela, rendez le fichier exécutable en exécutant la commande suivante:

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

Vous devriez maintenant pouvoir exécuter la commande helloet "Hello world" devrait apparaître dans le terminal.


Enfin:

Une troisième option serait d’ajouter la ligne suivante à votre fichier ~/.bashrc:

alias hello='echo "Hello world"'

Ensuite, sourcez votre fichier .bashrc en utilisant la commande suivante:

. ~/.bashrc 
2
mchid

GNU Bash est le shell utilisé par défaut dans les terminaux sur Ubuntu. Toutefois, lorsque les scripts sont exécutés au démarrage du système, un tiret est utilisé, car il s’agit du tiret/bin/sh.

Ne fonctionnera pas ->

$ sh hello.sh

Travaillera ->

$./hello.sh

Problème résolu

2
James A

Selon votre script:

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

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