1
我試圖爲多個輸入數據文件製作腳本。什麼是最好的方式,如何處理這些論點?腳本的使用方法應該是:如何使用getopts處理多個輸入文件參數
./script.sh -a sth -b sth - c sth -d sth input1 input2 input3
我能處理的參數和使用getopts的參數,但我不知道,如何處理這些輸入文件,因爲沒有標誌他們。 感謝
我試圖爲多個輸入數據文件製作腳本。什麼是最好的方式,如何處理這些論點?腳本的使用方法應該是:如何使用getopts處理多個輸入文件參數
./script.sh -a sth -b sth - c sth -d sth input1 input2 input3
我能處理的參數和使用getopts的參數,但我不知道,如何處理這些輸入文件,因爲沒有標誌他們。 感謝
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
這正是我在找的,謝謝。我可以請你解釋一下,它是如何工作的?我理解這種轉變,但我不知道,「文件循環」是如何工作的(它怎麼可能,它忽略了其他論點,並且只是爲了最後一個論點)? – Majzlik
實際上,根據您的問題,您正在尋找處理getopts中的所有內容,我添加了一個額外的'for loop' :)。對於解釋部分: 閱讀移動cmdline參數('shift $((OPTIND - 1))'),您將瞭解'$ @'如何獲得您想要的所需文件。 – PradyJord
我不會推薦第二個版本,因爲它無法處理文件中帶有空格或其他字符的文件。讓'getopts'處理這些選項,並將非可選參數保留在'$ @'中供以後處理。 – chepner