2012-07-25 16 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

相關問題