如何使windows下的bat文件调用linux下的shell脚本的方法

如题所述

第一步:规划
在连通bat和shell之前要先把windows和windows之间的关系,linux和linux之间的关系打通。
windows之间用net use 进行连接,linux之间使用ssh进行连接

第二步:打地基
PS:以下所有运行环境都是在超级管理员下运行,省的跳出一些乱七八糟的东西阻碍造桥大计。
windows间可用net use进行测试,查看是否能相连的。

例:net use \\192.168.1.124\ipc$ "123456" /user:"administrator"
net use \\ip地址\ipc$ "密码"/user:"用户名"

这个密码和用户名都是要连接过去那台机子的密码和用户名的
若出现以下提示就证明连接成功

当然万事都是没有这么顺利的。。。
例如。。。

像这么些乱七八糟的错误基本就是网络不通啊,ip地址有误,用户名密码有误之类造成的。。。
所以得多多利用度娘、谷姐之类的神器进行解决。
或许有时候可能还会用到以下一些命令

net use 来查看哪些是存在的
net use \\192.168.1.210\ipc$ /del 用来删除连接

windows的连接方式就是如此。
在你的客户机上用同样的方法去测试需要加入批量关机大军的windows服务器。

linux间通信使用ssh方式来进行。
先进行配置linux间ssh双机互信机制,这样就可以使两机之间通信不需要输入密码进行访问,将密码全部隐藏起来,这样也起到了安全作用。
关于ssh双机信任机制可以我之前的博客上查看
http://alwaysyunwei.blog.51cto.com/3224143/1222601

第三部:架桥
现在linux机器上写一个shell脚本进行批量关机
其中ip.txt存放要批量关机的linux机器ip
当然shutdown_boot.sh应该像下面这样写,而不是图片中的那样,图片中的内容只是我做测试用的。
#!/bin/sh
for ip in `cat ip.txt`
do
ssh $ip <<EOF
echo "{$ip} shutdown now..."
ifconfig
init 0
EOF
done

ssh 192.168.1.216 -p10088<<EOF
echo "shutdown 192.168.1.216 now...."
ifconfig
init 0
EOF

因为在我的正式环境中216这台机子SSH端口比较特殊,所以单独剥离出来。

桥的一端已搭好,现在搭建另一端,windows下bat脚本来进行windows批量关机
建立一个shutdown.bat文件
写入以下内容

#批量关闭windows机器

net use \\192.168.1.249\ipc$ "12345" /user:"administrator"
shutdown -s -f -t 20 -m \\192.168.1.249

net use \\192.168.1.254\ipc$ "123456" /user:"administrator"
shutdown -s -f -t 20 -m \\192.168.1.254

net use \\192.168.1.210\ipc$ "123456" /user:"administrator"
shutdown -s -f -t 20 -m \\192.168.1.210

桥的另一端也搭好了

最后一步就是把两端连起来
这时候就要请出我们的putty工具
可谷姐、度娘下载一个

第一次要进行手动连接

用这个工具进行连接shell脚本所在的那台机子

填上IP和端口即可。
然后进行连接,会提示输入用户名和密码,登入完后就出现sshhostkeys文件夹

然后把shutdown.bat文件放入到跟这文件夹同级目录下。
在bat文件添加以下内容

#批量关闭linux机器

D:
cd puttyfile_0.62cn
putty.exe -ssh -pw 123456-m test.sh root@192.168.1.241

简单说下这个语法
putty.ext -ssh -pw 密码 -m 要在linux执行的文件 用户名@IP地址

其中test.sh也是放在sshhostkeys同级目录下,里面写上你要向linux执行的命令

#!/bin/sh

cd /opt/script/shell
#mkdir /tmp/test061502
sh shutdown_boot.sh
#mkdir test06170

最终的结果就是以下内容了

shutdown.bat

test.sh

这样就大功告成

第四步:后期工作
按照这个流程可以完成最初的要求,但这样会存在很多的安全问题,密码明码就是一个问题,这个还有待研究看要怎样处理。
另外一个,在这个bat文件中最好加一个时间判断,比如晚上6点后点击执行这个bat文件可以正常运行,其他时间段点击时则出现告警,以防误操作导致关机。

还有其他的等等一些内容需要完善,待以后想到了在 进行补充。
温馨提示:内容为网友见解,仅供参考
无其他回答

如何使windows下的bat文件调用linux下的shell脚本的方法
第一步:规划 在连通bat和shell之前要先把windows和windows之间的关系,linux和linux之间的关系打通。windows之间用net use 进行连接,linux之间使用ssh进行连接 第二步:打地基 PS:以下所有运行环境都是在超级管理员下运行,省的跳出一些乱七八糟的东西阻碍造桥大计。windows间可用net use进行测试,查看是否...

如何使windows下的bat文件调用linux下的shell脚本的方法
bat文件和shell脚本是两个不同类型的脚本,解释器不同,所以无法调用。如果一定要执行,可以在windows系统下安装cygwin来实现。

如何在windows下使用linux的shell脚本
1、首先运行cmd,在cmd命令提示符执行bash命令。2、然后找到要执行的脚本文件执行即可。下图执行了一个t.sh的脚本文件。二、对于windows10之前的版本,可以借助于vmware、virtualpc等虚拟机来安装linux虚拟机,从而实现linux脚本的执行。三、除了安装虚拟机外,也可以安装windows上的linux模拟环境,比如cygwin。

如何在windows下使用linux的shell脚本
在windows下使用linux的shell脚本,只能采用模拟终端的方式,比如git,GnuWin32,cygwin等。以GnuWin32为例:1:下载GnuWin32,GnuWin32的安装文件(GetGnuWin32-0.6.3.exe)下载地址:http:\/\/sourceforge.net\/projects\/getgnuwin32\/,官网地址:http:\/\/gnuwin32.sourceforge.net\/ 2:运行GetGnuWin32...

如何在windows下使用linux的shell脚本
在 WINDOWS 系统下,无法使用 Linux 系统的 SHELL 脚本程序。因为 Linux 系统的 SHELL 编程有它自己的语言结构和语法定义,它和 WINDOWS 是不兼容的。所谓的 WINDOWS SHELL 脚本,其实就是在于对批处理文件(*.bat)的编程,如果对批处理文件的编程比较精通的话(同样也有 if 语句、for 语句等),那么...

能否在windows上写个bat文件远程执行另一台Aix服务器上sh文件???如何...
1、本机(windows)没有可以自动登陆的command,必须有的话,那么需要给windows安装ssh for windows的插件,这个 我装过。2、ssh可以写到ssh ip地址这一步,但是ssh没法自动输入密码。仍然需要给windows安装插件我记忆中应该是expect。这样的话,应该能搞到ssh到aix服务器。这样应该就能实现一些了,但是我...

如何在windows下使用linux的shell脚本
linux下可以使用的程序叫shell脚本 windows下可以使用的程序叫bat脚本 所以两者不兼容也不通用

请问在Linux下可以运行bat文件么?
1、如果bat文件指的是windows平台上以.bat为结尾的批处理文件。类似于下图所示的文件内容:一般来说不能在linux平台进行运行,主要是因为windows和linux使用不同的shell控制结构和命令。如果只是单纯的命令组合而成的.bat文件,并且linux平台也存在与windows上一样的命令,则可以兼容执行,比如下面的代码:ech...

求问BAT脚本如何自动执行 adb shell 以后的命令
bat脚本只负责将"shell su"作为参数传递执行一次adb.exe。这个动作完成,这条命令的步骤就算结束了,但此时su还有一个切换用户身份的动作,如果有密码还会通过shell请求用户输入密码,但运行bat的cmd环境是它收不到这个请求的。解决办法:一. 将su命令之后需要执行的命令写成一个sh脚本。通过adb将sh脚本推入...

如何将这个.bat 执行文件改成.sh 的 shell 脚本
1、shell第一行#!\/bin\/sh 2、shell定义变量export libpath=.3、shell使用变量$libpath,替换%libpath 4、目录和目录要用冒号,你可以参考tomcat里面的catalina.sh的CLASSPATH libpath=${libpath}:${lib}commons-codec.jar pause可以用sleep 1代替 5、例如 !\/bin\/sh cd ..\/bin export lib=..\/...

相似回答