• ベストアンサー

bash 条件式について

他人が作ったシェルスクリプトを見てるんですが、私自身初心者でいくつかよく分からないところがあります。 if文条件式(というよりtestの条件)の等号記号についてです。 if [ 条件式 ]; then で、 1)2つの文字列が等しいかどうか確認する際に用いる記号は = でいいんでしょうか? テキストとして見ている書籍には、”=”で書いてあるのですが、今動いているというスクリプトには”==”と記述してあります。 2)2つの数値が等しいかどうか確認する際に用いる記号は -eq でいいんでしょうか? 今動いているというスクリプトには”==”と記述してあります。”==”と記述してもインタプリタのほうで吸収してくれて動かしてくれているのでしょうか? 今、見ている書籍のサンプルソースにも、文字列比較で、"="と書いてあったり、"=="と書いてあったりとよく分かりません。条件式はif文、それ以外で違ったりしてくるんでしょうか? すみません。よろしくお願いします。

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

  • ベストアンサー
  • y_nakkan
  • ベストアンサー率46% (24/52)
回答No.1

bashのマニュアルのURLを貼ります。 >if [ 条件式 ]; then で、 >1)2つの文字列が等しいかどうか確認する際に用いる記号は = でいいんでしょうか? = , == のどちらでもOKです。 = の方は、bashの元となったbshから使われている文字列比較演算子です。 == の方は、恐らくC言語で使われている演算子です。C言語では、=(代入), == (等価比較)を区別しています。 bashで == が = の代わりに使用できるようになったのは、bash Ver. 2.02以降です。 >2)2つの数値が等しいかどうか確認する際に用いる記号は -eq でいいんでしょうか? >今動いているというスクリプトには”==”と記述してあります。”==”と記述してもインタプリタのほうで吸収してくれて動かしてくれているのでしょうか? -eq, == どちらでもOKです。 上記と同様に、-eq はbshの頃から使われている数値比較演算子です。 == も使用できます。

参考URL:
http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html
rickgogo
質問者

お礼

ありがとうございました。 すっきりしました。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4834/10234)
回答No.2

きっとCからの連想で==と書いてしまい、エラーになる人が続出するために機能追加されたんでしょうけど、/bin/sh で実行することも考えると = と書くように心がけたほうがいいでしょうね。 また、= も == も文字列としての比較なので、数字としての比較は -eq を使う必要があります。 [ 3 -eq 03 ] は真ですが、[ 3 == 03 ] は偽です。 >条件式はif文、それ以外で違ったりしてくるんでしょうか? これら演算子はシェルの組み込みコマンド test (別名 [ …… 昔は組み込みコマンドでなかったので外部コマンド /bin/test だった) の演算子なので、if で使おうが、 while で使おうが、それ以外で [ 3 -eq 03 ] && date のように使おうが同じです。

rickgogo
質問者

お礼

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

関連するQ&A

  • 条件式について

    お世話になります。 if (n == "aaaa"){aaaaに関する条件式; } else if (n == "bbbb"){bbbbに関する条件式; } else if (n == "cccc"){ccccに関する条件式; } とある場合、n に「aaaa」、「bbbb」、「cccc」以外の 不特定の文字列が入った場合の記述方法を教えてください。 よろしくお願い致します。

  • if文の条件式について

    iPhone OS 3.0、Xcode 3.1.3という環境でobjective-cをベースとしてiPhone向けアプリケーションを作る研究をしています。 どちらかというとC言語の質問になりますが、if文で使う条件式にNSString型で宣言した文字列を使うにはどうすればいでしょうか? NSString *startArea = [[NSString alloc] initWithFormat:@"pt.x > 224 && pt.y < 100"]; というコードでstartAreaに代入されたpt.x > 224 && pt.y < 100という文字列をif文の条件式として使えればと思ってます。 ちなみに、、、 if( startArea ){ 実行したい命令 } という記述をしたところ、ビルドエラーは発生しませんでしたが条件が無視されてしまいました。 他にコードの間違いがあるかもしれませんが、まずはこの内容で判断をお願いします。

  • クエリで不等号を含んだ条件式を使いたい。

    Access2000で質問です。 クエリの抽出条件のところでifを使った条件式をいれたいのですが、ここに不等号(<,>など)を使うにはどのような記述をすれば良いのでしょうか? 具体的には、「iif[form名]![コントロール名]=XX,"AA",>[form名]![BBコード]」..みたいな使い方をしたいのですが。正しい記述法を伝授下さい。

  • if [ 条件式 ]とif[[ 条件式 ]]

    シェルスクリプトでのif [ 条件式 ] と if [[ 条件式 ]] の違いについて教えてください。 以下のシェルスクリプトを実行すると、 意図したとおり、111 と出力されます。 =========▼▼(ここから)▼▼========= #!/bin/sh AAA=yes if [[ "$AAA" = [yY]* ]] then echo 111 else echo 222 fi =========▲▲(ここまで)▲▲========= 上記、スクリプト3行目の if [[ "$AAA" = [yY]* ]] の部分を if [ "$AAA" = [yY]* ] というように、角カッコ 1重にすると、 エラーは発生しませんが、 222と表示されます。 if [ 条件式 ] と if [[ 条件式 ]] の違いについて教えていただけないでしょうか。

  • 文字列か数値か判定する条件式

    こんにちは。 A1が文字列なら0。A1が数値ならA1そのもの。 というIF文を作りたいのですが、  =if(A1=文字列,0,A1)  ←こんな感じ 条件式はどう書けばいいのでしょうか?  A1=string ←ではだめでした。  not A1=numeric ←でもだめでした。 ご教示ください。

  • 条件式について

    C言語でプログラムを作成しています。 if分を使う部分があるのですが、条件式「==」を使うとどうもうまくいきません。 プログラムの条件文の箇所を簡単に書きますと、 if(time>=2000){ 条件1; if(a[i] == a[i-1]) 条件2; }else{ 条件3; } という非常に一般的なものです。 3行目の「==」がうまく機能しておらず、条件2がスルーされてしまいます。ためしに「>=」に変えて実行してみるとうまく機能します。 以前もこういった状況があったので、「==」を使わない記述をしたのですが、今回は「==」を使わなければならないので、「==」が機能しない理由があれば教えていただきたいです。 非常に基礎的なことで申し訳ないのですが、宜しくお願い致します。

  • 条件式

    お世話になります。初心者です。条件式について、知恵をお借りいただきたく、投稿しました。 サンプル ------------------------------- for i= 1 to 100 if i =x then Call *** next ------------------------------- 1)この”X”部分の記述法がわかりません。 2)させたいことは次です。 ・ある動作を100回ループさせる。 ・"i"が10増えるごとに、あるスクリプトを呼び出す よろしくお願いします。

  • if文の条件式の書き方について

    現在VC++2005でプログラムを作成しています。 そこであるテキストファイルをテキストボックスに表示してからその表示されている内容の1行目をif文を使って判断するというものを作っています。 そこで、質問なのですがif文の条件を作るときに文字列として条件を入れたい場合はどのようにしたら良いのでしょうか? 現在は7:00ならばというものなのですが、読み込んだ文字列に7:00以外のものが入っていてもそのまま判断されてしまうのできっと条件式のところが問題だと思うのですが。 下に作成中のコードを書きますので、良かったらご教授お願いします。 ********************************************************* String^ ss; ss=textBox3->Text; ss=textBox3->Lines[0]; textBox5->Text=ss; String^ time; time=textBox5->Text; if (char time='7:00'){ MessageBox::Show("7時"); } else { MessageBox::Show("ミス"); } **********************************************************

  • bashのif文複数条件について

    お世話になります。 まず、下記のスクリプトをご確認ください。 if [ ! -f ${E_FILE} -o -f ${E_FILE} -a `grep -c 'ERROR' ${E_FILE}` -ne 0 ] ; then 上記条件文は次のような論理解釈で作成しました。 (${E_FILE}というファイルが存在しない) or  (${E_FILE}というファイルが存在する and ファイル内に'ERROR'という文字列が存在する) これを実行すると: too many argumentsというエラーが返ってきます。 原因をご存知の方がいればご教示いただきたく存じます。 よろしくお願いいたします。

  • フォームを開くときのwhere条件式でnull値のものに絞りたい

    VBAの記述で、フォームを開くときにレコードの抽出条件を指定できますが、その際,指定したフィールドの値がNullのもの、逆にNullLでないものという条件の与え方はできないのでしょうか? 値がある文字列と等しいとかある数値や日付以上といった条件式はヘルプでみるのですが、NullかNullでないといった判断をさせる条件式が参考書等でもみあたらないのですが。  それとも何か違うやりかたがあるのでしょうか?ご存知のかたは教えてください。

専門家に質問してみよう