2014-04-29 56 views
1

我試圖爲多個輸入數據文件製作腳本。什麼是最好的方式,如何處理這些論點?腳本的使用方法應該是:如何使用getopts處理多個輸入文件參數

./script.sh -a sth -b sth - c sth -d sth input1 input2 input3  

我能處理的參數和使用getopts的參數,但我不知道,如何處理這些輸入文件,因爲沒有標誌他們。 感謝

回答

3
while getopts ":a:b:c:d:" opt; do 
    case "$opt" in 
    a) i=$OPTARG ;; 
    b) j=$OPTARG ;; 
    c) k=$OPTARG ;; 
    d) l=$OPTARG ;; 
    esac 
done 
shift $((OPTIND - 1)) 


for file in "[email protected]"; do 
    # your stuff here 
done 

請試試這個,這可能會解決的宗旨,爲您

我自己的意見,促使我向答案:

如果你想從getopts的唯一做到這一點 你將不得不調用腳本

./script -a hj -b op -c zx -d some -f "File in list seperated with spaces"

while getopts ":a:b:c:d:f:" opt; do 
    case "$opt" in 
    a) i=$OPTARG ;; 
    b) j=$OPTARG ;; 
    c) k=$OPTARG ;; 
    d) l=$OPTARG ;; 
    f) files=$OPTARG ;; 
    esac 
done 
         #no shift is required now, since we have file list in $files 
for file in $files; do 
    # your stuff here 
done 
+0

這正是我在找的,謝謝。我可以請你解釋一下,它是如何工作的?我理解這種轉變,但我不知道,「文件循環」是如何工作的(它怎麼可能,它忽略了其他論點,並且只是爲了最後一個論點)? – Majzlik

+0

實際上,根據您的問題,您正在尋找處理getopts中的所有內容,我添加了一個額外的'for loop' :)。對於解釋部分: 閱讀移動cmdline參數('shift $((OPTIND - 1))'),您將瞭解'$ @'如何獲得您想要的所需文件。 – PradyJord

+0

我不會推薦第二個版本,因爲它無法處理文件中帶有空格或其他字符的文件。讓'getopts'處理這些選項,並將非可選參數保留在'$ @'中供以後處理。 – chepner