0

我正在尝试创建一个简单的脚本,用于通过 ssh 登录到各种服务器,所有密钥都已安装并且正在工作,但我根本无法让这个脚本为我工作。基本上有一个关于用户希望登录到哪个服务器的选项,但它不断抛出以下错误:

': 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 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

任何帮助将不胜感激,使用 bash 相对较新,现在这让我很烦!

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

通过复制粘贴尝试了您的脚本,它起作用了。我对其进行了更多修改,以使无效的选择选项起作用。

呃……对不起,但它对我有用吗?

#!/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 的新手。我建议使用 case 语句而不是一堆 if 语句,并且我还在你的 read 语句中添加了一个提示(使用 -p 选项)。您也可以查看 select 语句而不是 case。

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