- 締切済み
Shellスクリプトについて
趣味で自宅にubuntuを入れて、Linuxの本を片手にもって勉強している学生です それでshellスクリプトでテストの結果を入力したら自動的にA.B.Cと認識するプログラムを作ったんですけど $ ./test ./test: line 4: echoPlease input your record: command not found 12 ./test: line 7: case12in: command not found ./test: line 8: syntax error near unexpected token `)' ./test: line 8: `100 | 99 | 98 | 97 | 96 | 95 | 94 | 93 | 92 | 91| 90 ) echo"A";;' なぜコマンドが見つからないのかわかりません ちなみにプログラムは #!/bin/sh echo"Please input your record" read record case"$record"in 100|99|98|97|96|95|94|93|92|91|90) echo"A";; 89|88|87|86|85|84|83|82|81|80) echo"B";; 79|78|77|76|75|74|73|72|71|70) echo"C";; 69|68|67|66|65|64|63|62|61|60) echo"D";; 59|58|57|56|55|54|53|52|51|50) echo"E";; 49|48|47|46|45|44|43|42|41|40) echo"F";; 39|38|37|36|35|34|33|32|31|30) echo"G";; 29|28|27|26|25|24|23|22|21|20) echo"H";; 19|18|17|16|15|14|13|12|11|10) echo"I";; 9|8|7|6|5|4|3|2|1|0) echo"J";; *)echo"sorry,answer not recognized";; esac exit もしどこか間違っていたら教えてください
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- a-saitoh
- ベストアンサー率30% (524/1722)
行末に CR(\r)がついているだけでは? いったいどんなエディタでこのシェルスクリプトを作ったんですか?
- Tacosan
- ベストアンサー率23% (3656/15482)
いや, だから, コード全体を「一字一句そのまま」の形で出してよ.
- notnot
- ベストアンサー率47% (4900/10358)
\r は空白ではなくてCR、日本語だと復帰、カーソル位置を行頭に戻す制御記号です。 cygwinはWindows環境の中にunix租界をつくるものですが、改行がWindowsだと\r\nで、unixだと\nなので、そのあたりの設定のまずさのために、変数recordの末尾に\rが付いてしまってるんだと思います。 そのあたりのことをきちんとわかってないと、cygwinを使うのは難しいです。何か設定があったはずですが、cygwinは棄てたので忘れちゃいました。 Linuxの勉強をするのが目的なら、cygwinは適してません。unixをよく知った人がWindowsでunixライクなことをしたいときに使うツールです。
お礼
丁寧に教えてくださってありがとうございます だけど先輩に頼んでLinux(fedora)でも試してもらったんですけど not a valid identifiered:'record line 4 syntax error near unexpected token '$'in\r" line 4 'case "$record" in caseの部分でどうしても引っかかってしまいます 一応/bin/sh --versionも調べて見ました もしかして拡張子を.shにしないとダメですか? スクリプトを呼び出す方法って /bin/sh ファイルネーム 又は chmod +x ファイルネーム ./ファイルネーム であってますか?
- Tacosan
- ベストアンサー率23% (3656/15482)
多分, 「記号を確認した」とか「本と同じ記号を使っている」と書くよりも, 全体をコピペした方がいいと思う. しかし, \r が何で入ってるんだろ!?
補足
¥rの意味がわかりました 空白です だけど not a valid identifiered:'record line 4 syntax error near unexpected token '$'in\r" line 4 'case "$record" in ほかのcaseを使ったサンプルプログラムも試したんですけど、case....で引っかかります。 もう2日ぐらいやってるんですけど全然できません なにかほかの方法がないでしょうか? もしかしたらボーンシェル(/bin/sh)が入ってないと思い確認したら、/bin/shはありました 改善します>>ubuntuじゃなくcygwinでした。すいません
- a-saitoh
- ベストアンサー率30% (524/1722)
エラーメッセージが出るんですから間違っているに決まっています。 echo△"Please input your record" case△"$record"△in △のところに空白(半角スペースかタブ)が必要です。
補足
line 4 syntax error near unexpected token '$'in"\r" 通訳すると>>第4行構文エラー 近くに予想外の記号があります それで記号を確認したんですけど、やっぱりだめでした 本と同じ記号を使ってるんですが、できません
お礼
ありがとうございました Linuxでやったら、すぐにできました 皆さんありがとうございます