gpt4 book ai didi

linux - 创建 bash 脚本以 ssh 到不同的系统并运行命令

转载 作者:太空宇宙 更新时间:2023-11-04 03:58:23 26 4
gpt4 key购买 nike

第一次来这里,对于脚本编写来说非常初学者。我正在尝试创建一个带有选项的脚本,该脚本允许我通过 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 的用法,我认为这是由于我的循环格式所致。但不确定出了什么问题。只是寻求一些意见。

最佳答案

我们来问问shellcheck正如 bash tag wiki 所建议的:

$ 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"!= ""] 。无论如何,您似乎并不打算处理多个参数。

关于linux - 创建 bash 脚本以 ssh 到不同的系统并运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23916894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com