-2

我需要有关我的 getopts 的帮助,我希望只有在传递标志(在本例中为 -d)时才能运行此命令( mount 命令)。下面的输出是我的脚本中的内容,但它似乎不起作用。

检查安装=""

而 getopts ":d" 选择
做
  案例“$ opt”在

  d) CHECKMOUNT="true" ;;

      用法 >&2
      1号出口;;
    经社理事会
   完毕
  转移`expr $OPTIND-1`

FS_TO_CHECK="/dev"

如果 [ "$CHECKMOUNT" = "true" ]
然后
  如果猫 /proc/mounts | grep $FS_TO_CHECK > /dev/null; 然后
   # 文件系统已挂载
别的
   # 文件系统没有挂载
  菲
菲

4

1 回答 1

1

你的脚本有很多问题。

这是使其正常工作的最小修复列表:

  • While不是 bash 控制语句,它是while. 案例很重要
  • 空格很重要if ["$CHECKMOUNT"= "true"]不起作用,应该会导致错误消息。您需要在括号周围和 . 周围留有空格=,如下所示:if [ "$CHECKMOUNT" = "true" ].
  • 您的用法getopts不正确,我猜您在复制示例时输入错误:While getopts :d: opt应该是:while getopts ":d" opt
  • 你的用法shift不正确。这应该会导致错误消息。将其更改为:shift $((OPTIND-1))如果您需要转移OPTIND.
  • 裸文本unknocn 标志看起来像一个注释,在它前面加上#,否则在使用未知选项时会出错。
  • 没有usage功能。定义一个,或usage在您的\?)情况下更改为echo使用说明。

最后,如果您的脚本只需要一个可选参数,您也可以简单地自己处理它而不是使用getopt- 脚本的第一个参数存储在特殊变量中$1

if [ "$1" = "-d" ]; then
    CHECKMOUNT="true"
elif [ "$1" != "" ]; then
    usage >&2
    exit 1
fi
于 2012-07-25T23:40:32.457 回答