0

I'm trying to create a simple script for logging into various servers via ssh, all keys have been installed and are working but i simply cannot get this script to work for me. Basically there is an option as to which server the user wishes to login to but it keeps throwing up the following error:

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

The script layout can be found below with dummy info:

#!/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 root@1.2.3.4 -p 5678

elif [ $INPUT -eq 2 ] ; then
echo"Logging in"
echo"..."
ssh root@1.2.3.4 -p 5678

elif [ $INPUT -eq 3 ] ; then
echo"Logging in"
echo"..."
ssh root@1.2.3.4 -p 5678

elif [ $INPUT -eq 4 ] ; then
echo"Logging in"
echo"..."
ssh root@1.2.3.4 -p 5678

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

Any help would be greatly appreciated, relatively new to using bash and this is just annoying me now!

4

5 に答える 5

3

Windowsでこのファイルを作成したようです。次のようなdos2unixを使用してみてください:

dos2unix <your_script>
于 2012-12-30T02:59:53.470 に答える
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 root@${ips[$REPLY]} -p ${ports[$REPLY]}
break
done

(ホスト名を使用するのではなく、IPアドレスを指定する理由はまったくわかりませんが!)

于 2012-12-30T09:39:07.943 に答える
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 root@1.2.3.4 -p 5678

    elif [ $INPUT -eq 2 ] ; then
        echo "Logging in 2"
        echo "..."
        ssh root@1.2.3.4 -p 5678

    elif [ $INPUT -eq 3 ] ; then
        echo "Logging in 3"
        echo "..."
        ssh root@1.2.3.4 -p 5678

    elif [ $INPUT -eq 4 ] ; then
        echo "Logging in 4"
        echo "..."
        ssh root@1.2.3.4 -p 5678

    elif [ $INPUT -eq 5 ] ; then
        exit 0
    else
        echo "invalid choice"
    fi
done
于 2012-12-30T03:04:15.497 に答える
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
于 2012-12-30T03:14:01.037 に答える
0

これはあなたの質問に答えていないことは承知していますが、あなたは bash は初めてだと言いました。混乱したifの代わりにcaseステートメントを使用することをお勧めします。また、読み取りステートメントにプロンプ​​トを追加しました(-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 root@1.2.3.4 -p 5678
    ;;

2)
    echo "Logging in"
    echo "..."
    echo ssh root@1.2.3.4 -p 5678
    ;;

3)
    echo "Logging in"
    echo "..."
    echo ssh root@1.2.3.4 -p 5678
    ;;

4)
    echo "Logging in"
    echo "..."
    echo ssh root@1.2.3.4 -p 5678
    ;;

5)
    echo "exiting"
    exit 0
    ;;

*)
    echo "invalid choice"
    return
    ;;
esac
于 2012-12-30T03:16:44.237 に答える