2012-05-01 78 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'可能会给你(不相关的)系统调用的manpage。 – 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