不起作用';而GETOPS';在BASH脚本中

不起作用';而GETOPS';在BASH脚本中,bash,shell,while-loop,getopt,getopts,Bash,Shell,While Loop,Getopt,Getopts,我有一个带有两个参数的脚本,主机和这个主机的域名。看: #!/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 { ec

我有一个带有两个参数的脚本,主机和这个主机的域名。看:

#!/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

我哪里有错误?请提供帮助。

在getopts之后覆盖
主机
dns
的值。。。您的脚本按预期工作

./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”
,它将执行您想要的操作

为什么这样做:
host=“$1”
?一旦你做到了,为什么结果会让你惊讶?