• ベストアンサー

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

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

  • ベストアンサー
  • uwi
  • ベストアンサー率74% (55/74)
回答No.3

if [ $P -ge 10 ]; then ちなみにこの [ は単なる括弧ではなく組み込みコマンドです。 コマンドなので [ の前後にスペースが必要です。 でも私は if test $P -ge 10; then の書き方が間違いがなくて好きです。

sweetmusic
質問者

お礼

ありがとうございます! []つけたら表示されました♪ また、testを使った方法もあるのですね! 勉強します! 本当に有難うございました!

その他の回答 (2)

  • OKwebb
  • ベストアンサー率44% (92/208)
回答No.2

うまくいかないのはif文かな。 条件式は[]で括った方がいいよ。 if [ $P -ge 10 ]; then 気をつけるのは括弧と条件式の間にspaceをいれること。 あと、最後のelifはelseでもいいかもね。

sweetmusic
質問者

お礼

ありがとうございます! []つけたら表示されました♪ 本当に有難うございました!

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

検索したところbashのif構文は if [ 値1 比較演算子 値2 ];then 実行文 fi とのことで [ ] と ; が無いのが原因ではないでしょうか

sweetmusic
質問者

お礼

ありがとうございます! []つけたら表示されました♪ 本当に有難うございました!

関連するQ&A

  • if文について

    cshで書いています。 if文がとおりません。。。 0: Event not found. このようなメッセージが出力されます。 if ($flg == "xxx") then echo "aaa" else if($flg == "yyy") then echo "bbb" exit else echo "ccc" exit endif 内容は上記のような感じです。 どなたか教えて下さい。

  • Linux の shell プログラミングについて

    すみません、どなたがご存じでしたら教えてください。 Linux の shell プログラミングですが、 実行するコマンドをそのまま表示する良い方法が無いでしょうか? 現在は実行するコマンドをechoで書いています。 たとえば次のような感じです。 #!/bin/bash var1=/etc echo 'ls -l $var1 | wc -l' ls -l $var1 | wc -l 結果 ls -l $var1 | wc -l 205 でも(echoで)同じ内容を2行書きたくないので いろいろ調べて次のようにしてみました。 #!/bin/bash var1=/etc set -x ls -l $var1 | wc -l set +x 結果は + ls -l /etc + wc -l 205 + set +x 思ったようになりませんでした。 他に良い方法が何かありますでしょうか? よろしくお願いいたします。

  • シェルスクリプト(if文)

    bashにてシェルスクリプトを作成しています。 XXXX_111122222333_YYYYMMDD 111122222333 といった2パターンのファイル名から、「111122222333」の部分を取得したいのですが、if文の条件式で悩んでいます。 if [ expr length ${p9} -gt 13 ] then a=`echo $p9|cut -c 6-9` b=`echo $p9|cut -c 10-14` c=`echo $p9|cut -c 15-18` else a=`echo $p9|cut -c 1-4` b=`echo $p9|cut -c 5-9` c=`echo $p9|cut -c 10-13` fi これで実行すると too many arguments というエラーが出てしまいます。(結果も正しくありません) 基本的な部分が理解できていないかと思うのですが、宜しくお願いいたします。

  • 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'

  • bashのif文で構文エラー:

    bashで時間の比較によっての分岐を考えています。 ネットで検索しながらif構文を下記のようにしてみているのですが、 行 10: 構文エラー: 予期しないファイル終了 (EOF) です となってしまいます。 どなた様かお教え願えませんでしょうか #!/bin/bash DATA=`date +%-H%M` if [ $DATA -gt 600 ];then echo "$DATA" else echo "NG" fi 

  • linux 制御文2

    Linuxを使い始めて3ヶ月目のど素人です 前に、質問したのですが 文章が解りにくかったので再度、書き直して質問です 何卒、宜しくお願いします ↓a.shの中身 if [ $1 = 1 ]; then echo "A,a1,OK" echo "A,a2,OK" echo "B,b1,OK" echo "B,b2,OK" elif [ $1 = 2 ]; then echo "A,a1,OK" echo "A,a2,NG" echo "B,b1,OK" echo "B,b2,NG" elif [ $1 = 2 ]; then echo "A,a1,NG" echo "A,a2,NG" echo "B,b1,NG" echo "B,b2,NG" 部分説明 A・Bをドメイン a1・a2・b1・b2をドメイングループ OK・NGをステータス と表現します 質問部分(スクリプト作成) 1、a.shを実行し結果を「monitor.log」に格納 2、1で出力したファイルをユニークなドメイン数をカウントする 3、2でカウントした数だけループ処理を実行する 3-1、対象のドメインに対するドメイングループ数をカウント 3-2、対象のドメインに対する、グループ「OK」の数をカウントする 3-3、3-1と3-2の数を以下判定する 例 ケース(1)[3-1] = [3-2] ケース(2)[3-1] > [3-2] ケース(3)[3-1] = 0 (1)(2)(3)それぞれの出力結果をhoge.logに出力する 3-4、3-3でケース(1)か(2)だった場合、ドメイン復旧(ステータス)か判定する (直前に実行したファイルmonitor.logのステータスと比較する) 復旧している場合、ログ出力する 長文で申し訳ありませんが、困ってます どなたか救いの手を!

  • UNIX

    UNIXの課題をやっていて、ここまで出来たのですが???の部分が 分かりません;誰か教えて頂けると助かります; 時間があれば説明も加えて頂けたら幸いです; #!/bin/bash #ふたつの引数の大小を判断し表示するシェルスクリプト if [ $# -lt 2 ] then echo "引数が足りません" exit fi cmp1=$1 cmp2=$2 if [ $cmp1 -gt $cmp2 ] then echo "$cmp1 ??? $cmp2" elif [ $cmp1 ??? $cmp2 ] then echo "$cmp1 = $cmp2" else echo "$cmp1 ??? $cmp2" fi

  • IF文のよる瞬停

    MORISEIKIのNV5000(制御盤FUNUC MSX-501)にてカスタムマクロを使用していますが、 下記のIF文で瞬停の現象が起こりスムーズに動きません。 同プログラムで三菱(MELDAS)の制御盤MCではスムーズに動くのですが、、、 G08P1 先行制御をマクロ前に指令しても変わりません。 ; IF[[[#22/2]-#18]GE#29]THEN#33=0 IF[[[#22/2]-#18]LT#29]THEN#33=[#29-[[#22/2]-#18]] IF[[#29*2]GE#22]GOTO123 ; IF文が3行続くとFUNUCでは厳しいのでしょうか? プログラム記憶容量(メインファイル)が標準の128KBなのでできるだけ コンパクトにしたいのですが、、、、 宜しくお願い致します。 IF文による瞬間停止の間違いです。 瞬時停電とは違います。(誤使用で申し訳ありません)

  • Linux制御文

    Linuxを使い始めて、3ヶ月目のど素人です if [ $1 = 1 ];then echo A,a1,OK echo A,a2,OK echo B,b1,OK echo B,b2OK elif [ $1 = 2 ];then A,a1,OK A,a2,NG B,b1,OK B,b2,NG elif [ $1 = 3 ];then A,a1,NG A,a2,NG B,b1,NG B,b2,NG fi スクリプトの中身(質問部分) cat ($1か$2か$3) | soet | cut -d ,-f1 | uniq -c    ↑ここにファイルを入れたい スクリプトに引数$1か$2を渡した時 新しくファイル出力して、そのファイルが、cat の場所に入れたい 解りにくくて申し訳ないですが、困ってます!どうか宜しくお願いします

  • vbsのif文で複数条件の判定

    例えば以下である場合、 WScript.echo AAA WScript.echo BBB vbsを実行すると "?"が表示されます。 "OK"が表示されない原因として考えられる事はありますでしょうか If AAA = false Then If BBB = false Then WScript.echo "OK" else WScript.echo "NG" End If else WScript.echo "?" End If