
スクリプトには次のスイッチ ケースがあります。
while [ $# -gt 0 ] ; do
case "$1" in
-f|--file)
shift
f=$1
;;
-s|--string)
s=$2
shift
;;
-c|--client)
c=$3
shift
;;
-h|-help)
_usage
;;
-*)
_usage
;;
esac
shift
done
しかし、これを実行すると、-c
渡した文字列が渡されることはありません。常に空白です。最初の 2 つの変数 (つまり -f と -s) が渡されるのに、なぜそうなるのかわかりません。なぜこのようなことが起こるのか、誰かアドバイスをいただけますか?
ybdemo が -c に渡されることを想定して、以下を実行します。
./find_prod_andfix.sh -f /etc/bar/active_clients -s foo -c "ybdemo"
Mon Aug 27 14:51:22 EDT 2018 find_prod_andfix.sh 11351 INFO: /etc/bar/active_clients
Mon Aug 27 14:51:22 EDT 2018 find_prod_andfix.sh 11351 INFO: foo
Mon Aug 27 14:51:22 EDT 2018 find_prod_andfix.sh 11351 INFO:
Mon Aug 27 14:51:22 EDT 2018 find_prod_andfix.sh 11351 INFO: Checking -- Client ID:
スクリプト内で上記の情報を繰り返す箇所は次のとおりです。
if [[ -z $c ]]; then
_info ${f}
_info ${s}
_info ${c}
_info "Checking ${line} -- Client ID: ${CLIENT_ID}"
fi
どのようなご提案でも大変助かります。
答え1
あなたは の使い方で自分自身を出し抜いていますshift
:
while [ $# -gt 0 ] ; do
case "$1" in
-f|--file)
f="$2" # Re-ordered for consistency
shift
;;
-s|--string)
s="$2"
shift
;;
-c|--client)
c="$2" # this was $3, which was the error
shift
;;
-h|-help)
_usage
;;
-*)
_usage
;;
esac
shift
done