我正在运行下面的脚本,但看起来$ filename或$ srvname没有得到输入值。 例如:./ test.sh -n abcd.net给出输出echo'必须定义文件名或节点名。' 这意味着,$ srvname没有得到值" abcd.net",请告诉我我做错了什么。 ?
set -x
usage () {
echo "usage: $0 -n <nodename>"
echo "usage: $0 -f <filename>"
echo "usage: $0 -h <help>"
}
while getopts ":nfh:" opt; do
case "$opt" in
n) srvname="$OPTARG" ;;
f) filename="$OPTARG" ;;
h) # help
usage
exit 0
;;
:) echo "Error: -$OPTARG requires an argument"
usage
exit 1
;;
?) echo "Error: unknown option -$OPTARG"
usage
exit 1
;;
esac
done
function dosomecheck {
echo "do some checks"
}
if [ "$filename" != "" ] ; then
# read file
for x in `cat $filename` ; do
dosomecheck $x
done
fi
if [ "$srvname" != "" ] ; then
# read file
for x in $srvname ; do
dosomecheck $x
done
fi
提前致谢
答案 0 :(得分:1)
尝试做:
while getopts ":n:f:h" opt;
因为-n
和-f
采用了参数而-h
没有。