我有一个脚本应该作为这两个中的一个运行:
script.sh -t TYPE
script.sh -t TYPE -f FILE
从这里和互联网上的信息和教程来看,这是我能得到的最接近的。任何人都可以帮我把第二个条件放入现有的代码吗?
while getopts ":t:" opt; do
case $opt in
a)
echo "JUST $OPTARG" >&2
;;
\?)
echo "Error - Invalid type argument" >&2
exit 1
;;
:)
echo "Error - No type argument" >&2
exit 1
;;
esac
done
答案 0 :(得分:4)
我认为你应该如何处理命令行参数。
常见的方法是所有参数的处理先于程序/脚本的实际作业。
如果选项附加冒号,则更多(与getopts
相关),表示该选项应具有参数。
您的case
语句看起来人口过多。您不需要测试冒号和问号。整个测试可以在while
循环
我会这样做
#!/bin/bash
unset TYPE
unset FILE
#uncomment if you want getopts to be silent
#OPTERR=0
while getopts "t:f:" opt; do
case $opt in
t)
TYPE=$OPTARG
echo "JUST $OPTARG"
;;
f)
FILE=$OPTARG
;;
esac
done
if ! test "$TYPE" ; then
echo "-t is obligatory"
exit 1
fi
if test "$TYPE" && test "$FILE" ; then
echo "$TYPE and $FILE"
fi
答案 1 :(得分:2)
看看这个:
TYPE=""
FILE=""
while getopts "t:f:" opt; do
case $opt in
t) TYPE="$OPTARG"
;;
f) FILE="$OPTARG"
;;
esac
done
if [ -z "$TYPE" ]; then
echo "No -t. Bye."
exit 1 # error
else
if [ -n "$FILE" ]; then
echo "$TYPE and $FILE"
else
echo JUST $TYPE
fi
fi