*EOFについて--ユーザー定義の終端子*


EOFという使い方を見たことがあるかもしれませんが、細かいことに注意したことがありますか?
次はスクリプトmenuでテストしてみましょう.
#!/bin/bash
printf "Do you want to see the menu?"
read answer
if [[ $answer == "yes" ]]
then
        cat << EOF
        1)Steak and eggs
        2)Fruit and Yogurt
        3)Pie and icecream
        EOF
echo "Pick one:"
read choice
        case "$choice" in
        1)printf "Cholesterol"
        ;;
        2)printf "Dieter"
        ;;
        3)printf "Sweet tooth"
        ;;
        esac

else
        printf "Later alligator!"
fi

テストの実行:
[oracle@sor-sys zy]$ sh menu 
Do you want to see the menu?yes
menu: line 25: syntax error: unexpected end of file
文法が間違っています.では、どこが問題になるか考えてみましょう.そう、そのEOFです.
分析:
1.catコマンドには<<とユーザ定義の終端子が接続され、ここではEOFです.終了子の後にcatコマンドの入力として、画面にメニューオプションが生成され、10行目の終了子に達したら、入力が終了します.
2.10行目の終端は6行目の終端とちょうど一致します.そうしないとmenuドキュメントは終了しません.また、最後の終端の周囲にスペースはありません.良い習慣のプログラマーはよく使います
インデントは、スクリプトの読み取りを強化するために使用されますが、この例では、10行目のEOFにインデント(Tabインデント)を使用したため、構文エラーが発生します.
ソリューション:
1.終了に使用したEOFをページの一番左側に移動し、その周囲にスペースがないことを確認します(ただし、この方法は美しく見えませんよ~).
2.bash/ksh/shの3つのshellは、別の方法を使用することができます.すなわち、修正されたスクリプトは次のとおりです.
#!/bin/bash
printf "Do you want to see the menu?"
read answer
if [[ $answer == "yes" ]]
then
        cat <

私はここで上のEOF終止符をendに変えて、<<の後に-を付けたのでtabでインデントできます、O(∩∩)Oははは~
寸法:
CholesterolコレステロールDieter節食者Sweet tooth(好み)甘いものalligator短口鄂see you laterこれは英語の別れの冗談にすぎず、laterとalligatorの尾音が韻を踏むことが肝心だ.もし誰かがそう言ったら、友好を表すだけで、俗語です.
練習:
メニューを1つだけ出力したいのですが、選択機能がない場合は、次の例を見てください.
#!/bin/bash
usage()
{
cat <