我需要帮助我的getopts,我希望只有在我传递一个标志(在这种情况下为-d)时才能运行此命令(mount命令)。 下面的输出是我的脚本,但它似乎不起作用。
CHECKMOUNT=" " while getopts ":d" opt do case "$opt" in d) CHECKMOUNT="true" ;; usage >&2 exit 1;; esac done shift `expr $OPTIND-1` FS_TO_CHECK="/dev" if [ "$CHECKMOUNT" = "true" ] then if cat /proc/mounts | grep $FS_TO_CHECK > /dev/null; then # Filesystem is mounted else # Filesystem is not mounted fi fi
答案 0 :(得分:1)
您的脚本存在许多问题。
以下是使其正常工作的最小修复列表:
While
不是bash控制语句,而是while
。案例很重要。if ["$CHECKMOUNT"= "true"]
不起作用,应该导致错误消息。您需要在括号周围和=
周围留出空格,如下所示:if [ "$CHECKMOUNT" = "true" ]
。getopts
的使用不正确,我猜您错误地复制了一个示例:While getopts :d: opt
应该是:while getopts ":d" opt
。shift
的使用不正确。这应该会导致错误消息。如果您需要转移shift $((OPTIND-1))
,请将其更改为:OPTIND
。 #
之前,否则在使用未知选项时会出错。usage
功能。使用使用说明定义一个,或将usage
案例中的\?)
更改为echo
。最后,如果您的脚本只需要一个可选参数,您也可以自己处理它而不是使用getopt
- 脚本的第一个参数存储在特殊变量$1
中:< / p>
if [ "$1" = "-d" ]; then
CHECKMOUNT="true"
elif [ "$1" != "" ]; then
usage >&2
exit 1
fi