- 締切済み
- すぐに回答を!
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 [[ 条件式 ]] の違いについて教えていただけないでしょうか。
- hotohoto3030
- お礼率0% (0/14)
- その他([技術者向] コンピューター)
- 回答数1
- ありがとう数0
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- 回答No.1
- kmee
- ベストアンサー率55% (1857/3366)
この書き方だと、Bsh系(bash,ksh,zsh等)ということでよいですね? [はtestコマンドの別名です。testコマンドは単独のコマンドです。 [[ は(forやif等と同種の)複合コマンドです。 http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html > [[ expression ]] > == 演算子と != 演算子が使われたとき、 演算子の右の文字列はパターンと解釈され、 後述のパターンマッチングで説明する規則に従ってマッチングが行われます http://linuxjm.sourceforge.jp/html/GNU_coreutils/man1/test.1.html > STRING1 = STRING2 > 両方の文字列が等しい とあるように、[[ではパターンマッチングが行われ、[では単純な文字列比較となります。 [[ では、Yesは 「yまたはYではじまる」というパターンに一致するので 0が返る → thenの方を実行 [では Yesと [Yy]* という文字列は一致しないので 1が返る → elseを実行 となります。 疑問があったら、まずはマニュアルを読みましょう。
関連するQ&A
- 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
- ベストアンサー
- その他(プログラミング・開発)
- シェルスクリプト(sh)の関数の戻り値とtestコマンドによる判定の仕
シェルスクリプト(sh)の関数の戻り値とtestコマンドによる判定の仕方が分かりません。 -------------------------------------------------- #!/bin/sh . GetYesNo.sh #外部シェルスクリプトを読み込んで... GetYesNo $1 #このGetYesNoの戻り値は0か1を出力するようにする。 if[ ??? -eq 0 ]; then #"???"の部分に何を入力すれば良いか分かりません。 echo "真(0)です。" else echo "偽(0以外)です。" fi -------------------------------------------------- 戻り値が0か1しか出力しない外部シェルスクリプトを読み込んで、その戻り値をtestコマンドを利用して、0か1のどちらかを判定して、それぞれの出力を出したいけれど、どうやって出来ますでしょうか。 色々な方法を試してみましたが、ダメでした。 上記のコードの書き間違いがあると思いますが、あったらご指摘をお願いします。
- ベストアンサー
- Linux系OS
- シェルスクリプトに関する問題です。(シェルの条件式)
先輩達、こんにちは。初めて質問をしますので、質問の仕方があまり上手ではありませんがよろしくお願いします。 今、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' のエラーメッセージがありました。 問題点はよくわからないですが、何の指令をしていないと思います。あまりにも簡単の問題ですが、ヒントだけでもいいですので、よろしくお願いします。
- ベストアンサー
- Linux系OS
- 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 内容は上記のような感じです。 どなたか教えて下さい。
- ベストアンサー
- その他(プログラミング・開発)
- bash 条件式について
他人が作ったシェルスクリプトを見てるんですが、私自身初心者でいくつかよく分からないところがあります。 if文条件式(というよりtestの条件)の等号記号についてです。 if [ 条件式 ]; then で、 1)2つの文字列が等しいかどうか確認する際に用いる記号は = でいいんでしょうか? テキストとして見ている書籍には、”=”で書いてあるのですが、今動いているというスクリプトには”==”と記述してあります。 2)2つの数値が等しいかどうか確認する際に用いる記号は -eq でいいんでしょうか? 今動いているというスクリプトには”==”と記述してあります。”==”と記述してもインタプリタのほうで吸収してくれて動かしてくれているのでしょうか? 今、見ている書籍のサンプルソースにも、文字列比較で、"="と書いてあったり、"=="と書いてあったりとよく分かりません。条件式はif文、それ以外で違ったりしてくるんでしょうか? すみません。よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- Bシェルのif文
if文の否定について教えてください。 if $aa='xxx' then else echo yyy fi 間違っているかもしれませんが上に書いたことをやろうとしています。 他の言語の if(!($aa='xxx'))echo yyy; をBシェルのif文で書くにはどうしたらいいですか? $aa='xxx'を$aa!='xxx'にするのではなくて、その外側のifの書式を教えてください。 最初に書いたコードでは、if(!条件)を知らないので if(条件) else 処理 endif のように書きました。
- 締切済み
- その他(プログラミング・開発)
- kシェルスクリプト内に行を挿入
kシェルスクリプトで質問です。 例えば、以下のようなファイルがあったとします ********************************************** #!/bin/ksh if (条件式1) then コマンド1 コマンド2 endif if (条件式2) then コマンド3 # aaaaaaaaaa else コマンド4 endif ********************************************** ”コマンド3”の文字列をキーにして"# aaaaaaaaaa"の下に 「echo ttttttttt」 と、を追加するといった方法、ないでしょうか? もちろん、viで開いて追加する・・・というのではなく、、、 awkやsed等々、コマンドで。ご存知の方いらしたらお願いします。 ps. 余力があればjavaでも検討したいとは思いますが、javaはまったく初心者。。
- ベストアンサー
- SE・インフラ・Webエンジニア
- Linuxのシェルについて
いつもお世話になっております。 Linux(redhat)でのシェルスクリプトを作成したいと思いますが、あるコマンドを実行して実行成功したか失敗したかをstatusで拾う形にしたのですがうまくいきません。アドバイスをお願いします。 例: #!/bin/sh set ST = $status date ←コマンド if [ $ST == 0 ]; then echo "**************" echo "* o k *" echo "**************" exit $NORMAL else echo "**************" echo "* N G *" echo "**************" exit $ABEND fi
- ベストアンサー
- その他(ITシステム運用・管理)
- 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文)
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 というエラーが出てしまいます。(結果も正しくありません) 基本的な部分が理解できていないかと思うのですが、宜しくお願いいたします。
- ベストアンサー
- Solaris系OS