• ベストアンサー

if文の質問です

初心者です。 よろしくお願いします。 aaaという文字を売ったときにだけtrueを表示したいのですが、うまくいきません。 以下の<結果>のようになってしまいます。 どうしたらうまくいくのか例文を探しても載っていなかったので質問しました。 if [ $1 = "aaa" ] ; then echo true ; else echo false ; fi <結果> $ ./test.txt aaa ./test.txt: line 7: syntax error near unexpected token `fi' ./test.txt: line 7: `fi'

質問者が選んだベストアンサー

  • ベストアンサー
  • saru_
  • ベストアンサー率39% (38/97)
回答No.2

Windowsのメモ帳など、改行コードがCR-LRになるエディターで作成しているのが問題だと思われます。 私の環境(Win XP + Cygwin)で、回答#1の補足のコードを確認したところ、以下のような結果でした。 1) viで作成 →問題なく動作 2)メモ帳で作成 ./t2.sh: line 8: syntax error near unexpected token `fi' ./t2.sh: line 8: `fi' という訳で、ご自分の環境で改行コードがLFのエディターを使って編集すれば問題ないと思います。 (なんの話かピンとこない場合、周りの有識者に訊くか、参考サイトを利用して頑張ってください。)

参考URL:
http://www.rsch.tuis.ac.jp/~mizutani/online/with-pc/textline.html
flandre2
質問者

お礼

ありがとうございます。 terapadというのを使ってLFというのを設定したらできました!

その他の回答 (1)

  • kt1965
  • ベストアンサー率34% (116/339)
回答No.1

こんばんは。 最初に、 #! /bin/sh や #! /bin/perl #! /bin/ruby #! /bin/python が抜けているので、「OS」が何を使って作った「コマンド」を処理するのか分からなくて困っているようです。

flandre2
質問者

補足

最初に「#! /bin/sh」をつけてみてもこのように解決しませんでした。 何が悪いのかが分かりません。 #! /bin/sh if [ $1 = "aaa" ] ; then echo true ; else echo fales ; fi <結果> $ ./test.txt aaa ./test.txt: line 8: syntax error near unexpected token `fi' ./test.txt: line 8: `fi'

関連するQ&A

  • 質問します。

    質問します。 シェルスクリプトで 標準出力とエラー出力をテキストに「追記で」出力するには どうすればよいでしょうか? コマンドプロンプトでは「sh test.sh >>& aaa.txt」 でうまくいくのですが、 シェルスクリプトで同じコマンドを発行すると、 「syntax error near unexpected token `&'」が発生します。

  • ファイルから文字列を読み込むシェルスクリプトの作成

    現在シェルスクリプトの勉強をしています。 ファイルから文字列を読み込み表示するだけのシェルスクリプトを 作成しているのですが、エラーが出てうまくいきません。 ./test.sh: line 10: syntax error near unexpected token `done' 以下の通りファイルを作っています。 改行コードはLF、文字コードはSJISとなっています。 どのあたりが間違っているのか教えて頂けますでしょうか。 よろしくお願いします。 test.sh --------------------- #!/bin/sh LIST=./abc.lst while read F1 echo ${F2} break done < ${LIST} } --------------------- abc.lst --------------------- AAA BBB CCC ---------------------

  • 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 もしどこか間違っていたら教えてください

  • FedoraCore4Linuxにおいてコマンドライン

    で以下の様にすると [root@aptiva ~]# function localtest{ local v;let u++;let v++;echo "u=$u";echo "v=$v";} bash: syntax error near unexpected token `local' [root@aptiva ~]# となるのですがどこが悪いのでしょうか?

  • ifで構文エラー?

    Red Hat Linux9がインストールしてあるPCがあり、 そこに #!/bin/sh if [ -f aaa.txt ] then   echo aaaaaaa else   echo bbbbbbb fi #end という内容のtest.txtを作り source test.txt と入力するとaaa.txtは無いので bbbbbbbと表示されはずですよね。 ですが if: 式構文?. と出てしまいます。 RedHatLinux9がインストールしてある別なPCでも 同じようにやったんですが こちらは問題なくbbbbbbbと出るんです。 何が悪いのかわからなくて困ってます。 よろしくお願いします

  • if文がうまくできません;;

    こんにちわ。 当方、linux初心者です。 今if文を作っているのですが、どうしてもうまくいきません。 ●lsで出力した結果が何行出力されたかによって回答が変わるシェルを作成してください。(10以上と9~3と2以下の3種類) という例題を解答中ですが、下記のとおり作ったのですが 何かアドバイスは頂けませんか? お願い致します。 #!/bin/bash ls -l > case.txt P=`cat case.txt | wc -l` if $P -ge 10 then echo '10以上' elif $P -ge 3 ; then echo '3以上' elif $P -le 2 ; then echo '2以下' fi

  • シェルスクリプトに関する問題です。(シェルの条件式)

    先輩達、こんにちは。初めて質問をしますので、質問の仕方があまり上手ではありませんがよろしくお願いします。 今、Fadore core2を使っていますが、シェルの条件式を練習しています。 #!/bin/bash # This program is used to study if than echo "Press y to continue" read yn if [ "$yn"="y" ]; than echo "script is running..." else echo "STOP!" fi を練習しましたが、実行したら ⇒syntax error near unexpected token `else' のエラーメッセージがありました。 問題点はよくわからないですが、何の指令をしていないと思います。あまりにも簡単の問題ですが、ヒントだけでもいいですので、よろしくお願いします。

  • bashで、gotoのようなラベルによるジャンプ構文をしたいのですが、方法をご教授ください。

    bashで、gotoのようなラベルによるジャンプ構文をしたいのですが、方法をご教授ください。 今はif分毎で、エラー時にメール配信処理してますが、全て同じあて先配信なので、 簡潔に処理内容をまとめたいです。 echo "aaa" if [ $? -ne 0 ] then echo "error desu" > honbun.txt mailx -s "error" aaa@aaa.c.jp < honbun.txt exit 1 else echo "ok" fi echo "bbb" if [ $? -ne 0 ] then echo "error desu" > honbun.txt mailx -s "error" aaa@aaa.c.jp < honbun.txt exit 1 else echo "ok" exit 0

  • バッチでファイルをリネームして別フォルダ移動に行き詰まり・・・

    バッチ(コマンドプロンプト)でファイルをリネームして別フォルダに移したいのですが行き詰ってしまったのでどなたかご教示ください。当方XPの環境です。 まず、今日(例:2月4日時点で)簡単に説明するとあるフォルダに3つファイルが存在します。 「test1」フォルダに「AAA200711.txt」「AAA200712.txt」「AAA200801.txt」があるとします。 数字はその月に作ったファイルと思ってください。 そのファイルを「test2」フォルダへ移したいと思っています。 移す際にファイル名をリネームしたいと思います。 2008年1月のものを「AAA1.txt」2007年12月のファイルを「AAA2.txt」といった感じでやるつもりです。 当方で考えた下記の構文でですが先月、先々月のものはうまくリネームしてコピーされました。 ですが3ヶ月前のファイルだけなぜか出来ません。 下記にあるのはそのまんまコピーしたものになります。 原因がわからず戸惑っておりますのでよろしくお願いします。 @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a LASTMONTH=YYYYMM-1 if %LASTMONTH:~-2%==00 set /a LASTMONTH+=12-100 copy C:\test1\AAA%LASTMONTH%.txt C:\test2\AAA1.txt @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a TWOMONTHAGO=YYYYMM-2 if %TWOMONTHAGO:~-2%==00 set /a TWOMONTHAGO+=12-100 copy C:\test1\AAA%TWOMONTHAGO%.txt C:\test2\AAA2.txt @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a THREEMONTHAGO=YYYYMM-3 if %THREEMONTHAGO:~-2%==00 set /a THREEMONTHAGO+=12-100 copy C:\test1\AAA%THREEMONTHAGO%.txt C:\test2\AAA3.txt ↑これがうまくいかないのです。 日付の計算とかが間違っているのでしょうか? cd /d C:\test2 del AAA*.txt

  • ログをコピーして移動させたいがうまくいかない

    ログをコピーし移動させたいのですがうまくいきません。 どなたか間違いがあったら教えてください。 タスクで時間になると起動させるつもりですが例えば「AAA200801.txt」と1月31日終わった時点で吐き出されたログを別フォルダへ「AAA.txt」と2月1日の何時かにリネームしてコピーしたものを移したいと考えています。 テストしているのですが移動しません(泣)どこか間違っていますか? @echo off set YYYYMM=%DATE:~-10,4%%DATE:~-5,2% set /a LASTMONTH=YYYYMM-1 if %LASTMONTH:~-2%==00 set /a LASTMONTH+=12-100 echo copy C:\test1\AAA%LASTMONTH% .txt C:\test2\AAA.txt また、四半期ごとに(例えば1~3月)出たログをまとめて「AAA200801.txt」を「AAA1.txt」、「AAA200802.txt」を「AAA2.txt」というようにまとめて変換して上記同様に別フォルダへリネームしてコピーしたいのですがどうしたらよいでしょうか?