2012-05-01 4 views
1
array=('org.battery.plist' 'org.disk.plist' 'org.memory.plist'); 

echo "1) org.battery.plist" 
echo "2) org.disk.plist" 
echo "3) org.memory.plist" 

echo "Enter selection(s) to load, separated by commas: " 
read var 

sudo launchctl load -w ${array[$var]} 

私は適切なトラックにいますか?私はちょっと立ち往生している。助けてもらえますか?bashスクリプトアレイ

ユーザ入力1、2、私はスクリプトが以下にこれを実行することが予想される場合 -

sudo launchctl load -w org.disk.plist 
sudo launchctl load -w org.memory.plist 
+2

選択... bash' 'で...'ステートメントに 'てみてください。ヘルプのために端末に 'help select'と入力してください。 – kev

答えて

1

IFS="," 
for i in $var 
do 
    sudo launchctl load -w ${array[$i - 1]} 
done 

あなたはまた、入力が配列の外にあるかどうかを確認する必要があります、これを試してみてください境界とスローとエラー。

+0

ありがとうdpp ...完全なコードを感謝します。 – Jim

1

驚くべきことには、 '選択' と呼ばれるように選択するためのbashでbuildinが、あります:

select entry in ${array[@]}; 
do 
    sudo launchctl load -w $entry 
done 

help selectを試してみてください。

+0

シェルの組み込みで 'help select'が動作するはずです。 'man select'はおそらくあなたに(関係のない)システムコールのマンページを与えるでしょう。 – ephemient

+0

@ephemient:はい、ありがとう、集中ミス –

0

これは良いです:

array=('org.battery.plist' 'org.disk.plist' 'org.memory.plist'); 

for ((i=0;i<"${#array[@]}";i++)) ; do 
    let n=i+1 
    printf '%d) %s\n' $n "${array[$i]}" 
done 

IFS=, read -r -p 'Enter selection(s) to load, separated by commas: ' -a selections 

for selection in "${selections[@]}" ; do 
    let selection=selection-1 
    sudo launchctl load -w "${array[$selection]}" 
done