2017-01-17 35 views
0

我想運行一個命令n次,具體取決於使用getopts函數爲shell提供了多少個參數。
根據getopts中給出的變量數量,運行shell命令幾次

這裏是script.sh內容:

#!/bin/bash 

while getopts "i" flag 
do 
    case "$flag" in 
    i) name="$OPTARG";; 
    esac 
done 
echo $name 

我想echo命令運行多次給定名稱。例如,如果我運行./script.sh -i One, Two, Three, Four,我希望腳本運行4次echo並將名稱打印到shell。

+0

使'name'成爲一個數組並將選項追加到它。 –

回答

2

理想情況下,你給逗號分隔的字作爲參數-i,後來乾脆把它分解的逗號(注意:需要bash由於使用數組和-a選項read)。

while getopts "i:" flag 
do 
    case "$flag" in 
    i) IFS=, read -a names <<< "$OPTARG";; 
    esac 
done 

printf '%s\n' "${names[@]}" 

那麼下面應該工作:

$ ./script.sh -i One,Two,Three,Four 
One 
Two 
Three 
Four 

getopts是不是真的設計用於處理參數任意數量的選項。

+0

確實,我沒有仔細看看從問題中複製的'getopts'命令。 – chepner

+0

你的例子很好。如果我想要'cp file1.txt/path/to/$ names/pictures'之類的東西怎麼辦? '$ names'是幾個不同的名稱給shell。我嘗試了一些基於代碼的東西,但無法使其工作...... –

+0

一般來說,不能簡單地將數組放入類似的參數中。你可能想爲每個元素分別運行'cp':'$ {names [@]}中的n'';做cp file1.txt「/ path/to/$ n/pictures」; done'。 – chepner

0

我會做這樣的事情:

#!/bin/bash 

if 
    [[ "$1" = -i ]] 
then 
    shift 
    for arg in "[email protected]" 
    do 
    echo "$arg" 
    done 
fi 

也許它不會在您的具體情況取決於你需要處理其他的選擇工作,但我缺乏信息進行確認。

相關問題