【问题标题】:Creating a bash script to ssh to a different system and run a command创建 bash 脚本以通过 ssh 连接到不同的系统并运行命令
【发布时间】:2014-07-17 23:42:47
【问题描述】:

第一次来这里,在脚本方面非常初学者。我正在尝试创建一个脚本,其中包含允许我 ssh 到另一个系统上的选项,然后在另一个系统上执行命令之后。这是我所拥有的:

usage(){
    echo "./clu_com <FE ip addr> <option>"
    echo ""
    echo "Options are:"
    echo "  -s | --ssh )    Run all of the ssh options"
    echo "  -g | --get )    Run all of the get options"
    echo "  -p | --put )    Run all of the put options"
    echo "  -h | --help )   Bring up this menu"
    echo ""
}

cssh(){

    ssh $2 '[ssh-command]'

}

cget(){

    ssh $2 '[get-command]'
}

cput(){

    ssh $2 '[put-command]'
}

if [ "$#" != 2 ]; then
    usage
else
    while [ "$1" != "" ]; do
    case $1 in
            -g | --get )    cget
                            ;;
            -s | --ssh )    cssh
                            ;;
            -p | --put )    cput
                            ;;
            -h | --help )   usage
                            exit
                            ;;
            * )             echo "Invalid"
                            usage
                            exit
                            ;;
    esac
done
fi

到目前为止,我所做的只是基本的 -h 命令,它只显示每个命令的选项菜单。这些命令已经是我在 ssh 进入系统后尝试使用的硬编码调用。每当我运行此代码时,我都会不断地获得 ssh 的使用情况,我认为这是由于我的循环格式造成的。不知道有什么问题。请只是寻找一些输入。

【问题讨论】:

  • 所以我的循环一定有问题,因为即使我只是输入我试图进入的系统的 ipaddr,然后尝试自动退出它,ssh 就是我马上回来进去。因此,如果我在 cssh 之后抛出一个退出,则循环会不断运行,它似乎允许我退出而不自动返回到节点..
  • 请提供一个示例调用和你得到的结果。

标签: linux bash loops ssh optional-parameters


【解决方案1】:

让我们按照bash tag wiki 的建议询问shellcheck

$ shellcheck yourscript
In yourscript line 12:
cssh(){
^-- SC2120: cssh references arguments, but none are ever passed.

In yourscript line 35:
 -s | --ssh ) cssh
              ^-- SC2119: Use cssh "$@" if function's $1 should mean script's $1.
...

然后就可以了。您在函数中使用$2,但在函数中,$2 表示函数的参数,而不是脚本的参数。

我建议您只将主机名作为参数传递给您的函数,然后使用"$1" 来引用它。

至于你的无限循环,我建议你用if [ "$1" != "" ] 替换你的while [ "$1" != "" ]。无论如何,您似乎并不打算处理多个参数。

【讨论】:

  • 太棒了!谢谢!我添加了一个变量 IP=$2,现在在查找 ipaddr 输入时调用 $IP。我还将我的 while-do 语句更改为 if-then 语句,因此脚本不再循环。再次感谢您的帮助! :)
猜你喜欢
  • 1970-01-01
  • 2016-11-09
  • 2011-06-21
  • 2015-09-06
  • 1970-01-01
  • 2021-03-20
  • 2015-05-29
  • 1970-01-01
相关资源
最近更新 更多