2015-10-11 11 views
0

我有我的問題在我的腳本優先。 例如,當我調用我的腳本./script -q -h時,它應該返回應該比其他人有更重要優先級的h選項。我的代碼如下:Bash腳本 - 如何使選項優先級比別人更重要

#!/bin/bash 
function usage 
{  

echo "Echoing login, name, surname of the invoker 

where: 
-h help 
-q quit(don't proceed script)" 
} 
function invalid 
{ 
echo "Invalid argument! 
" 
usage 
} 
while [ "$1" != "" ]; do 
    case $1 in 
    -h | --help)   usage 
          exit 
          ;; 
    -q | --quit)   exit 
          ;; 
    *)      invalid 
          exit 1 
    esac 
shift 
done 

echo $USER 
getent passwd $USER | cut -d: -f5 | cut -d, -f1 
+0

爲什麼您需要一個退出選項?對於大多數交互式工具,完成時退出不是可選的。 – tripleee

+0

這只是一項功課。我還需要在tcsh中執行相同的腳本,並且不知道如何執行此操作。看來,例如tcsh沒有功能。 – wegtis

+0

@triplee -q選項的地方可能是一些服務的管理工具,其中q可被視爲關閉該服務。或者啓動服務,讀取輸入文件並保持對新輸入文件的輪詢運行,除非您已提供-q選項。或'do_a_lot; read_options; do_more_when_not_quit'。 –

回答

0

在你case檢查,只設置變量(例如opt_h=1opt_q=1)。

然後事後檢查變量在任何你想要的順序:

if [ -n "$opt_h" ]; then 
    usage 
    exit 
fi 
if [ -n "$opt_q" ]; then 
    exit 
fi 
0

我會做到這一點是通過的情況下)塊設置變量的方式。 即

while [ "$1" != "" ]; do 
    case $1 in 
     -h | --help) DOHELP=true 
         ;; 
     -q | --quit) DOQUIT=true 
         ;; 
     *)   echo "Invalid arg" 
         exit 1 
    esac 
    shift 
done 

if [ -n "$DOHELP" ]; then 
    usage 
    exit 0 
fi 

if [ -n "$DOQUIT" ]; then 
    exit 0 
fi 
+0

我認爲OP會在'echo'Invalid arg「'後面想要'DOHELP = true'。 –

+0

當然,但這個問題是關於如何給選項偏好,而不是好的腳本設計。 –