用户输入的Bash数组键

时间:2015-12-30 20:26:20

标签: arrays linux bash shell ubuntu-14.04

所以我有一个bash脚本,它将扫描目录并在选定的输入上运行一个函数。

    echo -n "
-------------------------------------------------------
            `hostname` Menu
-------------------------------------------------------

Choose your desired Host:
`
i=1
for D in /var/www/*.*/;
    do   
        if [[ -d $D ]]; then
            Hosts[$i]=$D
            echo $i') ' $D
            i=$(($i+1))
        fi
    done
    `
"
read -p "Select: " Input
    Directory="${Hosts[$Input]}";
    ChangePerms;

似乎由于某种原因,密钥没有正确设置数组。

Choose your desired Host:
1)  /var/www/example1.com/
2)  /var/www/example2.com/
+ read -p 'Select: ' Input
Select: 1
+ Directory=
+ ChangePerms
+ true

我错过了什么?非常感谢所有帮助!

编辑: 作为旁注,我可以单独运行命令并获得结果。

root@web005:/# i=1
root@web005:/# for D in /var/www/*.*/;
>     do
>         if [[ -d $D ]]; then
>             Hosts[$i]=$D
>             echo $i') ' $D
>             i=$(($i+1))
>         fi
>     done
1)  /var/www/example1.com/
2)  /var/www/example2.com/
root@web005:/# read -p "Select: " Input
Select: 1
root@web005:/# Directory="${Hosts[$Input]}";
root@web005:/# echo $Directory
/var/www/example1.com/
root@web005:/#

以下是那些像我一样陷入困境的人的工作代码:

echo -n "
-------------------------------------------------------
            `hostname` Menu
-------------------------------------------------------

Choose your desired Host:

"
i=1
for D in /var/www/*.*/;
    do   
        if [[ -d $D ]]; then
            Hosts[$i]=$D
            echo $i') ' $D
            i=$(($i+1))
        fi
    done
read -p "Select: " Input
    Directory="${Hosts[$Input]}";
    ChangePerms;

2 个答案:

答案 0 :(得分:5)

你的问题是:

MediaPlayer

` i=1 for D in /var/www/*.*/; do if [[ -d $D ]]; then Hosts[$i]=$D echo $i') ' $D i=$(($i+1)) fi done ` 中执行。因此,您的脚本的其余部分不知道subshell是什么。 (换句话说,Hosts在脚本的主体中是空的)。在出示菜单之前填写Hosts

答案 1 :(得分:1)

你的引言对我来说似乎很奇怪。 这似乎有效:

#!/bin/sh
echo -n "
-------------------------------------------------------
            `hostname` Menu
-------------------------------------------------------

Choose your desired Host:
"
i=1
for D in /tmp/www/*.*/ ; do   
        if [[ -d $D ]]; then
                Hosts[$i]=$D
                echo $i') ' $D
            i=$(($i+1))
        fi
    done
read -p "Select: " Input
Directory="${Hosts[$Input]}";
echo $Directory