2017-06-15 5 views
-1

私はこのホストのホスト名とドメイン名の2つのパラメータを持つスクリプトを持っています。見て:BASHスクリプトで 'WHILE GETOPS'が機能しない

#!/bin/bash 

data=$(date +%Y.%m.%d) 
log=/var/log/upgrade_old_ALLOS.log.$data 

function show_help { 
echo "Usage: $0 -h host -d dns" 
echo "For example: ./upgrade_old_ALLOS.sh -h wwe.com01 -d wwe.com" 
} 

function logging { 
echo $(date) "______" "$1" | tee -a $log 
} 

while getopts h:d:s opt; do 
case $opt in 
s) 
    show_help 
    exit 0 
    ;; 
h) 
if [ -z "$OPTARG" ]; then 
    logging "Error. Name of host is not provided" 
    show_help 
    exit 1 
else 
    host="$OPTARG" 
fi 
;; 
d) 
if [ -z "$OPTARG" ]; then 
    logging "Error. Domain is not provided" 
    show_help 
    exit 1 
else 
    dns="$OPTARG" 
fi 
;; 
*) 
    show_help >&2 
    exit 1 
    ;; 
esac 
done 

if [ -z "$host" ]; then 
    logging "Host was not provided" 
    show_help 
    exit 1 
fi 

if [ -z "$dns" ]; then 
    logging "Domain was not provided" 
    show_help 
    exit 1 
fi 

host="$1" 
logging "$host" 
echo $host > /root/tag 
dns="$2" 
logging "$dns" 
echo $dns >> /root/tag 

if [ -f "/root/tag" ] ; then 
    hostname=$(awk NR==1 "/root/tag") 
    domain=$(awk NR==2 "/root/tag") 
    logging "$hostname" 
    logging "$domain" 
else 
    logging "Not found /root/tag" 
    exit 1 
fi 

を、私はこのように、このスクリプトを実行する必要があります

./upgrade_old_ALLOS.sh -h wwe.com01 -d wwe.com 

しかし、結果ファイルで、私はこの持っている:

-h 
wwe.com01 

をしかし、私は持っている必要があります。

wwe.com01 
wwe.com 

ここでエラーがありますか?助けてください。

+1

をやりたいだろう意図したとおりに、あなたのスクリプトは動作します: 'host =" $ 1 "'?そして、あなたがそれをしたら、どうして結果があなたを驚かせるでしょうか? – rici

答えて

0

あなたはgetoptsは後hostdnsの値を上書きし...

./upgrade_old_ALLOS.sh -h wwe.com01 -d wwe.com 
$1 : -h 
$2 : wwe.com01 
$3 : -d 
$4 : wwe.com 

host="$1" => host = "-h" 
dns="$2" => dns = "wwe.com01" 

host="$1"dns="$2"を削除し、それはあなたがこれを行うなぜあなたは

関連する問題