私はいくつかのbashスクリプトをやっています、そして今私は次のようにsource
と呼ばれる1つの変数呼び出しとsamples
と呼ばれる1つの配列を得ました:
source='country'
samples=(US Canada Mexico...)
私はソースの数を増やしたい(そして各ソースはそれ自身のサンプルを持っている)ので、私はこれを行うためにいくつかの引数を追加しようとしました。私はこれを試しました:
source=""
samples=("")
if [ $1="country" ]; then
source="country"
samples="US Canada Mexico..."
else
echo "try again"
fi
しかし、スクリプトsource countries.sh country
を実行したときにはうまくいきませんでした。何がおかしいのですか?
スペースを忘れないでください。
source=""
samples=("")
if [ $1 = "country" ]; then
source="country"
samples="US Canada Mexico..."
else
echo "try again"
fi
Bashの文字列比較には、 "="または "=="演算子を使用できます。重要な要素は括弧内の間隔です。適切な方法は、大括弧が中にスペースを含み、演算子が周りにスペースを含むことです。場合によっては、さまざまな組み合わせが機能します。ただし、次の例は一般的な例です。
if [ "$1" == "something" ]; then ## GOOD
if [ "$1" = "something" ]; then ## GOOD
if [ "$1"="something" ]; then ## BAD (operator spacing)
if ["$1" == "something"]; then ## BAD (bracket spacing)
また、二重括弧は一重括弧と比べて若干異なる扱いをします。
if [[ $a == z* ]]; then # True if $a starts with a "z" (pattern matching).
if [[ $a == "z*" ]]; then # True if $a is equal to z* (literal matching).
if [ $a == z* ]; then # File globbing and Word splitting take place.
if [ "$a" == "z*" ]; then # True if $a is equal to z* (literal matching).
私はそれが役立つことを願っています!
あなたはコマンドライン引数をあなたのbashスクリプトにパースしようとしているようです。私は最近自分でこれを探しました。私は以下のことに遭遇しました。私はあなたが議論を解析するのを助けると思います:
http://rsalveti.wordpress.com/2007/04/03/bash-parsing-arguments-with-getopts/
以下のスニペットをTlとして追加しました。
#using : after a switch variable means it requires some input (ie, t: requires something after t to validate while h requires nothing.
while getopts “ht:r:p:v” OPTION
do
case $OPTION in
h)
usage
exit 1
;;
t)
TEST=$OPTARG
;;
r)
SERVER=$OPTARG
;;
p)
PASSWD=$OPTARG
;;
v)
VERBOSE=1
;;
?)
usage
exit
;;
esac
done
if [[ -z $TEST ]] || [[ -z $SERVER ]] || [[ -z $PASSWD ]]
then
usage
exit 1
fi
./script.sh -tテスト-rサーバー-pパスワード-v
一見すると、あなたはifステートメントの中でcompare =
の代わりに==
という代入をしているのです。基本的にあなたはする必要があります:
mysource=""
samples=("")
if [ "$1" == "country" ]; then
mysource="country"
samples="US Canada Mexico..."
else
echo "try again"
fi
IE:
~$ source /tmp/foo.sh country
~$ echo $samples
US Canada Mexico...
それはあなたが欲しいものですか?