当前位置:  开发笔记 > 编程语言 > 正文

用户输入的Bash数组键

如何解决《用户输入的Bash数组键》经验,为你挑选了1个好方法。

所以我有一个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;

David Rankin.. 5

你的问题是:

`
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在脚本的主体中是空的).Hosts在您出示菜单之前填写.



1> David Rankin..:

你的问题是:

`
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在脚本的主体中是空的).Hosts在您出示菜单之前填写.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有