在 BASH 脚本中不起作用 'WHILE GETOPS'
Does not work 'WHILE GETOPS' in BASH script
我有一个带有两个参数的脚本,主机和该主机的域名。看:
#!/bin/bash
data=$(date +%Y.%m.%d)
log=/var/log/upgrade_old_ALLOS.log.$data
function show_help {
echo "Usage: [=12=] -h host -d dns"
echo "For example: ./upgrade_old_ALLOS.sh -h wwe.com01 -d wwe.com"
}
function logging {
echo $(date) "______" "" | 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=""
logging "$host"
echo $host > /root/tag
dns=""
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 之后覆盖了 host
和 dns
的值...您的脚本按预期运行
./upgrade_old_ALLOS.sh -h wwe.com01 -d wwe.com
: -h
: wwe.com01
: -d
: wwe.com
host="" => host = "-h"
dns="" => dns = "wwe.com01"
删除 host=""
和 dns=""
它会做你想做的事
我有一个带有两个参数的脚本,主机和该主机的域名。看:
#!/bin/bash
data=$(date +%Y.%m.%d)
log=/var/log/upgrade_old_ALLOS.log.$data
function show_help {
echo "Usage: [=12=] -h host -d dns"
echo "For example: ./upgrade_old_ALLOS.sh -h wwe.com01 -d wwe.com"
}
function logging {
echo $(date) "______" "" | 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=""
logging "$host"
echo $host > /root/tag
dns=""
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 之后覆盖了 host
和 dns
的值...您的脚本按预期运行
./upgrade_old_ALLOS.sh -h wwe.com01 -d wwe.com
: -h
: wwe.com01
: -d
: wwe.com
host="" => host = "-h"
dns="" => dns = "wwe.com01"
删除 host=""
和 dns=""
它会做你想做的事