2015-12-30 46 views
0

所以我有一個bash腳本,它將掃描一個目錄並在選定的輸入上運行一個函數。用戶輸入的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 

我在想什麼?所有的幫助非常感謝!

編輯: 作爲一個方面說明,我可以單獨運行命令並獲得結果。

[email protected]:/# i=1 
[email protected]:/# 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/ 
[email protected]:/# read -p "Select: " Input 
Select: 1 
[email protected]:/# Directory="${Hosts[$Input]}"; 
[email protected]:/# echo $Directory 
/var/www/example1.com/ 
[email protected]:/# 

這裏是爲那些誰卡住像我這樣的工作代碼:

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; 

回答

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

+0

天才!如果我有這樣的聲望,我會高興!謝謝!通過工作示例編輯代碼。 – LEXmono

+0

很高興幫助。我已經對自己做了一兩次...... –

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 
+0

這是最簡單的編輯,通過@ david-c-rankin作出答案!謝謝!我有一個有趣的引語,因爲我曾經有一個靜態的case語句,但我希望這可以在我的所有服務器上移植! – LEXmono