2012-11-04 96 views
2

使用bash getopts的腳本使用的

./foo.sh -v -r /home/ -s /home/user/file 
./foo.sh -r /home/ -s /home/user/file 

在參數我總是需要一個文件或掃描一個文件夾,該數據庫中的文件(-s數據庫文件)

內部foo.sh

function entrance() 
{ 
while getopts "v:r:s" opt; do 
    case $opt in 
    v) 
     echo "-v was triggered, Verbose mode" >&2 
     ;; 
    r) 
     echo "-r was triggered, recursive mode: $OPTARG" >&2 
     ;; 
    s) 
     echo "-s was triggered, DATABASE: $OPTARG" >&2 
     ;; 
    \?) 
     echo "Invalid option: -$OPTARG" >&2 
     exit 1 
     ;; 
    :) 
     echo "Option -$OPTARG requires an argument." >&2 
     exit 1 
     ;; 
    esac 
done 
} 

我不知道爲什麼它不起作用。

請修復我。

謝謝

+0

鑑於你的例子,你的選項字符串應該是'getopts的 「:VR:S:」' - 用你所擁有的,'-v'和' -r'需要參數,'-s'不需要。 –

+0

它以什麼方式不「工作」?是否有錯誤訊息? –

回答

2

您可能在調用函數時忘記了$ @。看到這一點:

#!/bin/bash 

function entrance() { 
while getopts "v:r:s" opt; do 
    case $opt in 
    v) 
     echo "-v was triggered, Verbose mode" >&2 
     ;; 
    r) 
     echo "-r was triggered, recursive mode: $OPTARG" >&2 
     ;; 
    s) 
     echo "-s was triggered, DATABASE: $OPTARG" >&2 
     ;; 
    \?) 
     echo "Invalid option: -$OPTARG" >&2 
     exit 1 
     ;; 
    :) 
     echo "Option -$OPTARG requires an argument." >&2 
     exit 1 
     ;; 
    esac 
done 
} 

entrance "[email protected]" 

而且一些解釋:Using getopts within user-defined-function in bourne shell

+2

您應該在'$ @'周圍使用雙引號以避免參數中的空格或其他元字符出現問題。 –