web-dev-qa-db-ja.com

bashスクリプトで条件付きを使用して文字列引数をチェックする

シェルスクリプトを記述しようとしていますthing.sh実行可能にして、「A」という1文字で実行すると、次のようになります。

$ ./thing.sh A

出力を取得します

A 

引数1がAでない場合、出力が必要です

Not A 

これがこれまでの私のコードです:

#!/bin/bash

if [ "$1" -eq "A"]
then echo "A"
else echo "Not A"
fi 

何を入力しても戻ります

./thing.sh: line 3: [:missing `]'
Not A

私は1つまたは複数の文字で何かをチェックし、それを文字Aと比較することを望んでいたものを試しています。これを機能させるために私が欠けているものを誰かに教えてもらえますか?ありがとうございました

18
user1535776

短い方はどうですか?

#!/bin/bash

[[ $1 == A ]] && echo "A" || echo "not A"

そして初心者向けバージョン(同一のロジック):

#!/bin/bash

if [[ $1 == A ]]; then
    echo "A"
else
    echo "not A"
fi

スコットが言ったように、構文エラーがあります(スペースがありません)。

解説

27
Gilles Quenot

最初の行を次のように変更します。

if [ "$1" == "A" ]

-eq演算子は整数用です。そして、他の誰かが述べたように、スペースは ']'の前に重要です。

ここを参照してください: http://tldp.org/LDP/abs/html/comparison-ops.html

5
Geoff Gustafson

"A"]の間にスペースを入れてみてください。

4
Scott

「A」の後にスペースが必要です

if [ "$1" -eq "A" ]
4
Fred Thomsen