BashスクリプトでAND演算子を操作できません

BashスクリプトでAND演算子を操作できません

入力が「on 1」の場合は1つの操作を実行し、入力が「on 2」の場合は別の操作を実行する非常に単純なbashスクリプトを作成しようとしています。人々がbashスクリプトでand演算子をどのように機能させるかを調べるためにインターネット検索を行ってさまざまな方法を見つけましたが、括弧を括弧()[]に置き換えることを発見するまで、そのうちの何も動作しないようです。

#!/bin/sh
#

if (($1=="on" && $2=="1")); then
    echo $1 $2
else
    echo failure
fi

これにより、私のスクリプトは2番目の引数を受け入れますが、1番目の引数は受け入れません。したがって、「off 1」を書くと、$ 1がifのように「on」でなくてもスクリプトが実行されます。しかし、"on 2"を書くと、コードはelseステートメントに移動します。

2番目のパラメータの代わりに2つのパラメータを正しく読み取るにはどうすればよいですか?

ベストアンサー1

二重括弧は数値演算に使用されます。角かっこは[]ブールコンテキストのように動作します。角かっこは移植性がなく、dash他の非常に小さなシェルでは失敗します。実際には[論理的な操作を実行するシェル組み込み/POSIXユーティリティなので、周囲にスペースが必要です。このリンクご質問がある場合は、このトピックに関する詳細情報があります。

これを書くと、次のようになります。

#!/bin/sh

# check we got the expected number of arguments
if [ "$#" -ne 2 ]; then
  echo USAGE ...
  exit
fi

if [ "x$1" = "xon" ] && [ "$2" -eq 1 ]; then
  echo "$1 $2"
else
  echo failure
fi

「x」接続は、空の文字列が原因でプログラムが中断されるのを防ぐのに最適な方法です。

おすすめ記事