2012-12-30 26 views
0

我想創建一個簡單的腳本通過SSH登錄到各種服務器,所有的鍵已經安裝並正在工作,但我根本無法讓這個腳本爲我工作。基本上有一個選項哪個服務器的用戶希望登錄,但它保持扔了以下錯誤:捕獲用戶輸入bash如果/然後/ elif

': not a valid identifier `INPUT 
login.sh: line 24: syntax error near unexpected token `elif' 
'ogin.sh: line 24: `elif [ $INPUT -eq 2 ] ; then 

腳本佈局可以在下面用假信息中找到:

#!/bin/bash 
echo "What Server would you like to login to?" 
echo "" 
echo "" 
echo "1. Server 1" 
echo "2. Server 2" 
echo "3. Server 3" 
echo "4. Server 4" 
echo "5. Exit" 
read INPUT 
if [ $INPUT -eq 1 ] ; then 
echo"Logging in" 
echo"..." 
ssh [email protected] -p 5678 

elif [ $INPUT -eq 2 ] ; then 
echo"Logging in" 
echo"..." 
ssh [email protected] -p 5678 

elif [ $INPUT -eq 3 ] ; then 
echo"Logging in" 
echo"..." 
ssh [email protected] -p 5678 

elif [ $INPUT -eq 4 ] ; then 
echo"Logging in" 
echo"..." 
ssh [email protected] -p 5678 

elif [ $INPUT -eq 5 ] ; then 
exit 0 
else 
echo "invalid choice" 
return 
fi 

任何幫助將不勝感激,使用bash相對較新,這只是現在煩我!

回答

3

看起來像你在windows上創建這個文件。 嘗試使用DOS2UNIX的一樣:

dos2unix <your_script> 
+0

使用的桌面+崇高的文本,甚至從來沒有想到它,謝謝! – BB1873

0

想你的腳本,通過複製粘貼,它的工作。我對它進行了一些修改,以使無效的選擇選項起作用。

Errm ...對不起,但它適用於我?

#!/bin/bash 
while true ; do 
    echo "What Server would you like to login to?" 
    echo "" 
    echo "" 
    echo "1. Server 1" 
    echo "2. Server 2" 
    echo "3. Server 3" 
    echo "4. Server 4" 
    echo "5. Exit" 

    read INPUT 
    if [ $INPUT -eq 1 ] ; then 
     echo "Logging in 1" 
     echo "..." 
     ssh [email protected] -p 5678 

    elif [ $INPUT -eq 2 ] ; then 
     echo "Logging in 2" 
     echo "..." 
     ssh [email protected] -p 5678 

    elif [ $INPUT -eq 3 ] ; then 
     echo "Logging in 3" 
     echo "..." 
     ssh [email protected] -p 5678 

    elif [ $INPUT -eq 4 ] ; then 
     echo "Logging in 4" 
     echo "..." 
     ssh [email protected] -p 5678 

    elif [ $INPUT -eq 5 ] ; then 
     exit 0 
    else 
     echo "invalid choice" 
    fi 
done 
0

我會通過回答你沒有問過這個問題的問題,把自己扔在SO巴士前。爲什麼不使用select

echo 'Which server would you like to log into?' 
select server in 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4; do 
    printf 'Logging in to server %s...\n' "$server" 
    ssh "$server" -p "$port" 
done 

如果你不喜歡select,那麼爲什麼不至少使用case

read -p 'Which server do you want? ' input 
case "$input" in 
    whatever) 
     printf 'Logging in to server %s...\n' "$server" 
     ssh "$server" -p "$port" 
     ;; 
    *) 
     echo 'Invalid option' 
     ;; 
esac 
0

我意識到這並不回答你的問題,但你說你是bash的新手。我建議使用case語句而不是ifs的混亂,並且我還向讀取語句(使用-p選項)添加了提示。您也可以查看select語句而不是案例。

#!/bin/bash 
echo "What Server would you like to login to?" 
echo "" 
echo "" 
echo "1. Server 1" 
echo "2. Server 2" 
echo "3. Server 3" 
echo "4. Server 4" 
echo "5. Exit" 
read -p "cmd> " INPUT 

case $INPUT in 

1) 
    echo "Logging in" 
    echo "..." 
    echo ssh [email protected] -p 5678 
    ;; 

2) 
    echo "Logging in" 
    echo "..." 
    echo ssh [email protected] -p 5678 
    ;; 

3) 
    echo "Logging in" 
    echo "..." 
    echo ssh [email protected] -p 5678 
    ;; 

4) 
    echo "Logging in" 
    echo "..." 
    echo ssh [email protected] -p 5678 
    ;; 

5) 
    echo "exiting" 
    exit 0 
    ;; 

*) 
    echo "invalid choice" 
    return 
    ;; 
esac 
1

這個答案其實只是一個評論,但是評論並不適合代碼。你的腳本可以大大簡化。考慮是這樣的:

#!/bin/bash 

servers=(host1 host2 host3) 
ips=(192.168.1.1 192.168.1.2 192.168.1.3) 
ports=(123 22 33) 
select server in ${servers[@]}; do 
    echo "Logging into $server..." 
    ssh [email protected]${ips[$REPLY]} -p ${ports[$REPLY]} 
break 
done 

(儘管這不是完全清楚你爲什麼會想指定IP地址,而不要使用主機名!),在傳輸之前

+0

不僅僅是將用戶輸入直接提供給算術評估。一個關聯數組可以解決這個問題,或者輸入驗證。 – ormaaj