BASHスクリプトは次のとおりです。
#!/bin/bash
read -p "Type in a color name, please: " COLOR
case "$COLOR" in
green | red | yellow)
echo -n "nice colors!"
;;
*)
echo -n "meh..."
;;
esac
x
ユーザーに対してスクリプトに対する権限が設定されている場合は、これを実行しますが、次の結果が得られます。
[inewton@centos7 LPIC1-exercises]$ ./colors.sh
Type in a color name, please: pink
./colors.sh: line 12: syntax error near unexpected token `newline'
'/colors.sh: line 12: `esac
[inewton@centos7 LPIC1-exercises]$
私は何が間違っていましたか?助けてください。
答え1
'/colors.sh: line 12: `esac
行の先頭に閉じる引用符が奇妙な位置にあることに注意してください。これは次のものがあることを示しています。キャリッジリターン(CR)単語の後の文字ですesac
。 BashはCRを単語の一部として扱うので、esac␍
これは予約語ではなく、esac
実際の単語がありません。
CR 文字は Windows 行末の一部です。 Unix行末は単一のLF(改行)文字ですが、Windows行末は2文字のシーケンスCR + LFです。バラより#!/bin/bash - そのファイルやディレクトリはありません。もっと説明したい。ここで問題は、ファイルに行末が混在していることです。前の行は問題を引き起こさないため、少なくとも一部のファイルにはUnix行の終わりが必要です。
ファイルからすべてのキャリッジリターンを削除します。ほとんどのエディタは、行末が混在するファイルに明示的に表示します。