web-dev-qa-db-ja.com

スクリプトsh構文エラー

私はこのスクリプトを持っています:

#!/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

私がそれを実行しようとすると、これが結果です:

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

問題はどこにありますか?

1
Kwiatkowski

スクリプトにはいくつかのCR(\ r)文字が含まれているように聞こえます。このスクリプトをWindowsから編集した場合、その理由を説明できます。これを実行すると、「見えない」キャリッジリターン文字が表示されます。

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

(1ではなく、小文字のLです)。上記に\rが表示されている場合は、それらを取り除くためのさまざまな方法について FAQ 52 を参照してください。

補足として、bashスクリプトに.sh拡張子を付けたり、shを指定してbashスクリプトを実行したりしないでください。

2
geirha