簡體   English   中英

用戶輸入的Bash陣列鍵

[英]Bash Array Key from User Input

因此,我有一個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;

您的問題是:

`
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

您的報價對我來說似乎很奇怪。 這似乎可行:

#!/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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM