2012-07-25 46 views
-2

我需要帮助我的getopts,我希望能够运行此命令(安装命令)只有当我通过一个标志(-d在这种情况下)。下面的输出是 是我的脚本,但它似乎不工作。如何创建一个标志与getopts运行命令

 
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

以下是来自Freenode上#bash频道factoids的一些有用的参考资料:http://wiki.bash-hackers.org/howto/getopts_tutorial和http://mywiki.wooledge.org/BashFAQ/035 – kojiro 2012-07-26 01:22:38

回答

1

您的脚本有许多问题。

这是修复的最小名单得到它的工作:

  • While是不是一个bash的控制语句,这是while。案例很重要
  • 空白很重要if ["$CHECKMOUNT"= "true"]不起作用,应该会导致错误消息。您需要在括号内围绕=,如下所示:if [ "$CHECKMOUNT" = "true" ]
  • 您对getopts的使用不正确,我猜你错过了这个复制的例子:While getopts :d: opt应该是:while getopts ":d" opt
  • 您对shift的使用是错误的。这应该会导致错误消息。如果您需要移动OPTIND,请将其更改为:shift $((OPTIND-1))
  • 裸露的文字unknocn标记看起来像是一条评论,在#之前,否则在使用未知选项时会出现错误。
  • 没有usage功能。根据使用说明定义一个,或将\?)案例中的usage更改为echo

最后,如果你的脚本只需要一个可选参数,你可能也只是自己处理它,而不是使用getopt - 第一个参数给你的脚本保存在特殊的变量$1

if [ "$1" = "-d" ]; then 
    CHECKMOUNT="true" 
elif [ "$1" != "" ]; then 
    usage >&2 
    exit 1 
fi 
+0

谢谢,但我有我的脚本中有多个选项,所以我无法使用您提供的内容。你注意到的几点 - 我修正了这些但仍然没有运气 – user1477324 2012-07-26 00:02:36

+0

你现在看到了什么问题?很可能你仍然有语法错误 – pb2q 2012-07-26 00:10:02

+0

它说非法选项-d – user1477324 2012-07-26 00:12:55

相关问题