簡単なケース/esac構成の練習に失敗しました。なぜですか?

簡単なケース/esac構成の練習に失敗しました。なぜですか?

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行の終わりが必要です。

ファイルからすべてのキャリッジリターンを削除します。ほとんどのエディタは、行末が混在するファイルに明示的に表示します。

おすすめ記事