*EOFについて--ユーザー定義の終端子*
EOFという使い方を見たことがあるかもしれませんが、細かいことに注意したことがありますか?
次はスクリプトmenuでテストしてみましょう.
テストの実行:
分析:
1.catコマンドには<<とユーザ定義の終端子が接続され、ここではEOFです.終了子の後にcatコマンドの入力として、画面にメニューオプションが生成され、10行目の終了子に達したら、入力が終了します.
2.10行目の終端は6行目の終端とちょうど一致します.そうしないとmenuドキュメントは終了しません.また、最後の終端の周囲にスペースはありません.良い習慣のプログラマーはよく使います
インデントは、スクリプトの読み取りを強化するために使用されますが、この例では、10行目のEOFにインデント(Tabインデント)を使用したため、構文エラーが発生します.
ソリューション:
1.終了に使用したEOFをページの一番左側に移動し、その周囲にスペースがないことを確認します(ただし、この方法は美しく見えませんよ~).
2.bash/ksh/shの3つのshellは、別の方法を使用することができます.すなわち、修正されたスクリプトは次のとおりです.
私はここで上のEOF終止符をendに変えて、<<の後に-を付けたのでtabでインデントできます、O(∩∩)Oははは~
寸法:
CholesterolコレステロールDieter節食者Sweet tooth(好み)甘いものalligator短口鄂see you laterこれは英語の別れの冗談にすぎず、laterとalligatorの尾音が韻を踏むことが肝心だ.もし誰かがそう言ったら、友好を表すだけで、俗語です.
練習:
メニューを1つだけ出力したいのですが、選択機能がない場合は、次の例を見てください.
次はスクリプト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 <