2012-07-30 122 views
1

我需要幫助找出腳本中的一個問題,選項(c,e,d,f和g)是我的腳本中的必需選項,否則在運行我的腳本之前總是隱含選項腳本不會被執行。現在我已經添加了一個命令,如果我試圖執行沒有任何必要參數的腳本,它仍然會被執行並退出,我的腳本不應該在沒有傳遞任何必需參數的情況下執行,但它仍然會執行並退出。我怎樣才能解決這個問題?shell腳本執行時沒有傳遞任何所需的參數

謝謝你在前進,

#!/bin/bash 


cont=false 


options=':c:d:e:f:g:h:i' # additional option characters go here 
while getopts $options option 
do 
    case $option in 
     c ) cont=true;; 
     d ) hello="$OPTARG" 
     e ) hi="$OPTARG" 
     f ) Fri="$OPTARG" 
     g ) Sat="$OPTARG" 
     h ) SUN="$OPTARG" 
     i ) ....so on 
     # more option processing can go here 

    esac 
done 

shift $(($OPTIND - 1)) 

回答

1

使用稱爲mandatory包含所需的選項和設置數組元素-給定一組選項,下面的代碼將報告未指定強制選項的錯誤:

mandatory=(c d e f g) 
options=':c:d:e:f:g:h:i' 
while getopts $options option 
do 
    for ((i = 0 ; i < ${#mandatory[@]} ; i++)); do 
    [[ $option == ${mandatory[$i]} ]] && mandatory[$i]="-" 
    done 
    case $option in 
     c ) echo c; cont=true;; 
     d ) hello="$OPTARG";; 
     e ) hi="1" 
    esac 
done 

for ((i = 0 ; i < ${#mandatory[@]} ; i++)); do 
    if [[ ${mandatory[$i]} != '-' ]]; then 
    echo "option ${mandatory[$i]} was not given" 
    exit 1 
    fi 
done 

if cat /proc/mounts | grep /dev ; then echo "mount exists 
   else 
   echo "mount doesn't exist" 
   exit ;  
fi  
+0

如何將我的mount命令集成到這個?因爲這是主要問題。 – user1477324 2012-07-30 04:13:06

+0

你沒有使用任何用戶提供的選項來裝載你的代碼。你如何使用它們? – perreal 2012-07-30 04:15:46

+0

對,我沒有使用任何選項,我只是將它傳遞給我的腳本,沒有提供任何選項。 – user1477324 2012-07-30 04:18:10

1

既然你在選項前一個冒號,這是你的責任處理錯誤的情況。

help getopts

如果OPTSTRING的第一個字符 是一個冒號,getopts的使用無聲的錯誤報告。在 此模式下,不會打印錯誤消息。如果看到一個無效選項 ,getopts會將找到的選項字符放入OPTARG中。如果沒有找到 所需的參數,getopts將':'放入NAME,並且 將OPTARG設置爲找到的選項字符。

您必須處理$option包含:的情況。

相關問題