web-dev-qa-db-fra.com

erreur de syntaxe du script sh

J'ai ce script:

#!/bin/bash
IP='192.168.1.1'
fping -c1 -t300 $IP 2>/dev/null 1>/dev/null
if [ "$?" = 0 ]
then
    echo "Host found"
else
    echo "Host not found"
fi

Lorsque j'essaye de l'exécuter, voici le résultat:

$ sh /home/pi/sh/test.sh         
/home/pi/sh/test.sh: 9: /home/pi/sh/test.sh: Syntax error: "fi" unexpected (expecting "then")

Où est le problème?

1
Kwiatkowski

On dirait que le script contient des caractères CR (\ r). Si vous avez édité ce script à partir de Windows, cela expliquerait pourquoi. L'exécution de ceci devrait révéler les caractères de retour chariot autrement "invisibles":

sed -n l /home/pi/sh/test.sh

(C'est L minuscule, pas 1). Si vous voyez un \r dans ce qui précède, voir FAQ 52 pour différentes façons de s'en débarrasser.

En passant, ne mettez pas .sh extension sur un script bash, et n'exécutez pas de script bash avec sh.

2
geirha