
echo ""
echo " $BAR1 | $BAR2 | $BAR3 "
echo "  ̄ ̄ ̄ ̄ ̄ ̄ ̄"
echo " $BAR4 | $BAR5 | $BAR6 "
echo "  ̄ ̄ ̄ ̄ ̄ ̄ ̄"
echo " $BAR7 | $BAR8 | $BAR9 "
echo ""
if [ $BAR1 -eq $BAR2 -a $BAR1 -eq $BAR3 -o \
$BAR4 -eq $BAR5 -a $BAR4 -eq $BAR6 -o \
$BAR7 -eq $BAR8 -a $BAR7 -eq $BAR9 -o \
$BAR1 -eq $BAR5 -a $BAR1 -eq $BAR9 -o \
$BAR7 -eq $BAR5 -a $BAR7 -eq $BAR3 ];
then
SCORE=`expr $SCORE + 700`
else
SCORE=`expr $SCORE - 30`
fi
echo ""
echo " スコアは【 $SCORE 】 です。 "
echo ""
簡単なスロットゲームを作ってみました。C言語では可能な AND/ORの優先順位づけ()がbashでも機能するでしょうか?自分なりにGoogleを探ってみましたが、満足のいく回答は見つけられませんでした。
以下の例では、エラーを返しました。
if [ (($BAR1 -eq $BAR2) -a ($BAR1 -eq $BAR3)) -o \
(($BAR4 -eq $BAR5) -a ($BAR4 -eq $BAR6)) -o \
…
なお、manコマンドで以下の説明を見つけましたが、知識が足りずよく意味がわかりません。
なお、コピペの都合上、スペースやタブなどが反映されず、スクリプトが見づらくなっていますが、ご容赦願います。
*************************************************************
(list)
list はサブシェル内で実行されます。シェルの環境に影響を与えるような変数の代入や組み込みコマンドは、コマンドの終了後に影響を残しません。返却ステータスは list の終了ステータスです。
No.4ベストアンサー
- 回答日時:
Solaris10 の test(1) には優先順位も書いてあったりします>#2.
これくらい基本的なコマンドだと, どのシステムの man を参照してもほとんど同じ.
参考URL:http://docs.sun.com/app/docs/doc/819-1210/test-1 …
この回答への補足
test expr
[ expr ]
条件式 expr を評価した結果に基づいて、ステータス 0 または 1 を返します。演算子とオペランドそれぞれは別々の引き数でなければなりません。式は前述の 条件式セクションで説明したプライマリで構成されます。式は次に示す演算子を使って結合できます。優先度の高い順に示します。
! expr expr が偽ならば真になります。
( expr )
expr の値を返します。これを使うと、通常の演算子の優先度を 変
更できます。
man のtestコマンドにはこう書いてありますが、今試してみましたがエラーがでます。最初の質問と一緒です。
試しに \( \) で囲ってみましたが、 -eq がきかなくなってしまいました。
参考urlではエスケープの必要性が説かれていますね。
エスケープをするときに、なにかコツがいるのでしょうか?
よくみてみたら、 \( と $BARをくっつけて書いてました。
このふたつを離したら、うまく動作しました。
ありがとうございました。
No.5
- 回答日時:
そう, 「\($BAR」と書くと, これ全体を 1つのものと解釈してしまいます. #1 の「それぞれを単独の引数として渡さなければならない」はこの辺のことを書いたつもりだったりします.
もちろん「左かっこが 2つ続く」ときも「\( \(」のように書かなければなりません, 念のためですが.
No.2
- 回答日時:
結論から言うと、-a の方が優先度が高いです。
見るmanは#1の方が書いた通り、man testですが、優先度については明示的に書かれてません。true OR true AND false をやってみましょう。ANDが先なら全体がtrueになり、前から順番なら全体がfalseになるはず。
if [ X -o X -a "" ] ;then echo true; else echo false; fi
の結果を見ると、-a が先に演算されていることがわかります。
なお、shやbashの && と || は同一優先度なので、前から順番です。
if true || true && false ;then echo true; else echo false; fi
ご回答ありがとうございます。
この優先順位のおかげで、スクリプトは思った通り動いていますが、これは演習でやってることなので、やはり優先順位をつけたいです。()を使用して、うまくエスケープできないかが課題です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Makefileのechoの展開について 2 2022/07/26 07:35
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
- その他(プログラミング・Web制作) test([)コマンドによる条件判定 2 2022/08/10 12:28
- その他(プログラミング・Web制作) zshの例外処理 1 2022/06/02 16:36
- 英語 "dozen"以外の数の単位が名詞を修飾する場合の"of"の必要性とその理由について 3 2023/04/29 16:03
- 教えて!goo ベストアンサー選定ルール変更には抜け穴がある。 15 2023/04/01 17:58
- その他(ニュース・時事問題) オミクロン株対応ワクチンですが、2022年10月から11月にかけて、BA.1の在庫無くなり次第BA. 1 2022/10/20 20:13
- 教えて!goo BA表示方法の変更 5 2023/04/30 10:19
- 教えて!goo 今回の機能変更のメリット 2 2023/04/02 21:45
- 風邪・熱 コロナワクチンについて 5 2022/10/26 21:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
batである文字列内に特定の文字...
-
シェルスクリプトでうるう年判定
-
スクリプト中のexportコマンド...
-
Cシェルで、文字列中(str)に、...
-
if文について
-
【シェルスクリプト】whileルー...
-
powershell でパラメータ的な変...
-
シェルスクリプトの変数の制限?
-
exprで四則演算をする際に変数...
-
Cシェルで標準エラー出力への...
-
Dirコマンドでフォルダ内ファイ...
-
pingは正常なのにtracerouteで...
-
win11のエクスプローラーの右ク...
-
スクリプトのエラー「unexpecte...
-
TOPコマンドで表示するCPU使用...
-
テキストファイルから最終行の抽出
-
シェルスクリプトでエラーが出ます
-
Linux環境 grepで改行コード(CR...
-
ラズパイで『’test.service’をs...
-
bashでシングルクォート内の変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batである文字列内に特定の文字...
-
スクリプト中のexportコマンド...
-
シェルスクリプトの変数の制限?
-
ファイルから文字列を読み込む...
-
if文について
-
Bシェル 文字列に含まれる特...
-
【シェルスクリプト】 for文で...
-
bashスクリプト
-
Cシェルで標準エラー出力への...
-
sh スクリプト ipアドレス形式...
-
sedなどで、特定の文字列からタ...
-
UWSCについて
-
【sh】tee コマンドの代替方法
-
文字列の一部を取り除きたい(...
-
cshの条件式について教えてくだ...
-
シェルスクリプトでうるう年判定
-
shellスクリプトから別のshell...
-
【シェルスクリプト】whileルー...
-
シェルで and/or の優先順位に...
-
Cシェルプログラムで、あるディ...
おすすめ情報