• ベストアンサー

[bash]複数の条件の結合

こんにちは。 以下のシェルスクリプトを作りたいのですが、どうすればいいのでしょうか? (1)$a、$bが自然数ならば$b<$cである限り処理を続ける。 while [ "$b" -le "$c" ] do ~ b=`expr $b + $a` done (2)$a、$bが自然数でなければ、エラーメッセージを返し、処理を終了する。 if ~ echo ~ fi (1)と(2)をどのように結合するのかが分かりません。 ご回答お待ちしております。

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

$a、$bが自然数でないことを判断する箇所は完成しているという前提です。 以下のようにしてください。 ------------------------ # $a,$bが自然数でないなら、スクリプトを終了 if ~ echo ~ exit ・・・・この行を追加 fi # 以下の行が実行されるのは、$a、$bが自然数の場合のみとなる。 while [ "$b" -le "$c" ] do ~ b=`expr $b + $a` done ---------------------------

kwgchrtk
質問者

お礼

うまくできました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【シェル】while文の変数定義について

    OS:Solaris10 sh:Bシェル お世話になります。 シェルの冒頭で定義した変数をwhile文の中で読み込ませたいです。 現状のシェルは下記の通りです。 ---- #!/bin/sh # *** 変数定義 *** AAA1=Spring BBB1=Summer AAA2=Autumn BBB2=Winter # *** メイン処理 *** i=1 while [ $i -le 2 ]; do AAA=AAA$i BBB=BBB$i echo ${AAA} echo ${BBB} i=`expr $i + 1` done ---- しかし、出力される結果は下記のようになってしまいます。 AAA1 BBB1 AAA2 BBB2 これを冒頭の「*** 変数定義 ***」で定義した値を読み込ませ、下記のような出力結果を得たいです。 Spring Summer Autumn Winter どうかご教授ください。

  • シェルスクリプトbashについての質問

    #!/bin/bash # トップ画面 function TOPVIEW() { echo "1)クイズ開始" echo "2)このアプリを終了" echo "3)アプリについて" echo "4)クイズ正解率" while echo -n "1,2,3,4を選択してください:" read ANS do case $ANS in 1) echo "正解" break;; 2) echo "終了します";; 3) echo "クイズアプリです";; 4) echo "正解率は";; *) echo "答えは1,2,3,4で入力";; esac done } # 問題作成 function QUIZ01() { echo "問題文" echo "(a)答えa(b)答えb(c)答えc" while echo -n "答えをa,b,cで入力してください:" read ANS do case $ANS in a) echo "正解" break;; b) echo "はずれ";; c) echo "はずれ";; *) echo "答えはa,b,cで入力";; esac done } function QUIZ02() { echo "問題文" echo "(d)答えd(e)答えe(f)答えf" while echo -n "答えをd,e,fで入力してください:" read ANS do case $ANS in d) echo "正解" break;; e) echo "はずれ";; f) echo "はずれ";; *) echo "答えはd,e,fで入力";; esac done } 最初の選択でクイズ開始を選択すると問題文に移行、、 終了を選択すると終了できるようにしたいのですが、 設定がわかりません どなたか教えてください お願いします

  • killでプロセスを終了したときの”終了しました”を表示させたくない

    お世話になります。 下記の内容のシェルスクリプトを実行すると数字の1~5が表示され最後に”終了しました”(LANG=Cだと”Terminated”)と表示されます。この”終了しました”を表示させたくないのですが何か良い方法はありますでしょうか? よろしくお願い致します。 ------- 以下シェルスクリプト -------- #!/bin/sh i=0 ( while : do sleep 1 done & ) | while : do echo $i if [ $i -eq 5 ];then kill -TERM 0 fi i=`expr $i + 1` done

  • bashにおける $[算術式] とは?

    ShellShock脆弱性で世間を騒がせているbashについて教えてください。 * 質問内容は脆弱性とは関係ありません :) 下記のコードは1から5までカウントする単純なwhileループです。 #!/bin/bash count=1 while [ "$count" -le 5 ]; do echo $count count=$[count+1] # ループ変数をインクリメント done ループ変数をインクリメントする書き方は色々ありますが、上記のような書き方は初めて見ました。 この $[count+1] の角括弧は何なのでしょうか? インタプリタシェルをdashにするとエラーになるので、bash特有の記述だとは思うのですが・・・ よろしくお願いします。

  • シェルスクリプトbashについての質問

    シェルスクリプトbashについての質問 #!/bin/bash function QUIZ01() { echo "問題文" echo "(a)答えa(b)答えb(c)答えc" while echo -n "答えをa,b,cで入力してください:" read ANS do case $ANS in a) echo "正解" break;; b) echo "はずれ";; c) echo "はずれ";; *) echo "答えはa,b,cで入力";; esac done } function QUIZ02() { echo "問題文" echo "(d)答えd(e)答えe(f)答えf" while echo -n "答えをd,e,fで入力してください:" read ANS do case $ANS in d) echo "正解" break;; e) echo "はずれ";; f) echo "はずれ";; *) echo "答えはd,e,fで入力";; esac done } QUIZ01 QUIZ02 要件として トップ画面で選択肢 1.クイズ開始 2.アプリについて 3.アプリ終了 4.クイズ正解率 クイズを開始したら、 クイズは全5問で3問不正解でアプリを終了 問題の画面には現在の成果率が表示される 問題文は外部ファイルとする 問題の出現方法はランダムとして、問題は重複しない どうか教えてくださいお願いします

  • シェルスクリプトの変数

    Bシェルのスクリプトで入力した情報を書き出すというスクリプトで詰まってしまったので、アドバイスをお願いできますでしょうか? #!/bin/sh # COUNTER変数のリセット COUNTER=1 # 繰り返す回数を入力 read KURIKAESHI # KURIKAESHIで入力した回数入力を受け取り、出力する while [ $COUNTER -le $KURIKAESHI ];  do # 必要な情報の入力("NYUURYOKU_{COUNTER変数の数字}"の変数に入れる)   read NYUURYOKU_$COUNTER   echo "$NYUURYOKU_$COUNTER" ←※ココ   COUNTER=`expr $COUNTER + 1` done 上記のようなスクリプトを書き、"$NYUURYOKU_$COUNTER"の値を出力したいのですが、何かよい方法はありますでしょうか? echo "$NYUURYOKU_$COUNTER" と記述しただけでは、$NYUURYOKU_と$COUNTERとバラバラになってしまいます。(当然っちゃ当然ですが・・・) 何かよい方法がありましたらご教授お願いいたします。

  • bashスクリプトでの配列参照

    bashスクリプトでの質問です。 配列を、ループ文で順に参照しようとしているのですが、 要素を変数で記述すると、うまく参照できなく困っております。 ---------------------------------------------- i=0 j=10 while $i -le $j do echo "${hoge[$i]} ${huga[$i]}" i=`expr $i + 1` done ----------------------------------------------- こんな感じの、スクリプトなのです。 要素を直接記述すると、ちゃんと中身を参照することができました。 やりたいことは、二つの配列の同じ要素の中身を、連結して表示するといったものです。 ご教授よろしくお願いします。

  • Bシェルで、1文字づつ読み込み、番地と共に出力する方法を教えてください。

    Bシェルで、1文字づつ読み込む方法を教えてください。 次のように文字が並んでいて、 A B C D E F G H I J K L M N O P それぞれの番地と共に、上記の文字を出力する場合、 どのようにしたら宜しいでしょうか。 入力ファイル:test.txt A B C D E F G H I J K L M N O P ↓ 1 2 3 4 1 A B C D 2 E F G H 3 I J K L 4 M N O P ↓ 出力ファイル A 1 1 B 2 1 C 3 1 D 4 1 E 1 2 F 2 2 G 3 2 H 4 2 I 1 3 J 2 3 K 3 3 L 4 3 M 1 4 N 2 4 O 3 4 P 4 4 番地に関しては、次のシェルを作成しましたが、 test.txtをどのように入力したら良いかが分かりません。 Xmax=4 Ymax=4 yy=1 while [ $yy -le $Ymax ] ; do xx=1 while [ $xx -le $xMax ] ; do echo $xx $yy | awk '{ printf(" %d %d ",$1,$2) }' >>out.txt xx=`expr $xx + 1` done yy=`expr $yy + 1` done 宜しくお願いします。

  • Bシェルで配列を使いたいのですが・・・

    下記のBシェルファイルで、あるテキストファイルの内容を1行ずつ読み込んで、その行を変数に代入し、後続にてその変数を表示するという処理を実現したいのですが、うまくいきません。 どのようにすればうまく行くのかまた、何故うまくいかなかったのかをご教授頂ければと思っております。 宜しくお願い致します。 <Bシェルファイル> #!/bin/sh exec 3<&0 < TBL.txt count=0 while read line do ex$count=$line count=`expr $count + 1` done exec 0<&3 3<&- echo ${ex[1]} exit 0 <結果> aho.sh: ex0=A コマンドが見つかりません。 aho.sh: ex1=B コマンドが見つかりません。 aho.sh: ex2=C コマンドが見つかりません。 aho.sh: 置換が正しくありません

  • linuxシェルスクリプトにつきまして

    linuxシェルスクリプトにつきまして 下記のシェルスクリプトがあります。 このうちの、 $num `expr 500 + $num` $num $num の部分がわからず、解説いただきたく、お手数をお掛けしますが、何卒よろしくお願いいたします。 #!/bin/sh num=1 while [ $num -le 100 ]; do printf "user%03d,%d,500,User %03d,/home/user%03d,/bin/bash\n" \ $num `expr 500 + $num` $num $num num=`expr $num + 1` done