shell-远程连接
何时需要远程连接
远程连接嘛,自然是本机访问不了了。这种情况还是比较常见的,比如服务器上的数据库,远端的主机等情况。
如果仅仅只是连接一次啥的,那就没必要下面的那些东西,因为手动输入反而简单一些。
连接方式
数据库
需要脚本的一个原因是要可以重复执行,另一个原因是连接上去之后的步骤比较多。如果是使用数据库的话,Oracle,mysql,mariadb等都可以直接写语句,语句间用分号隔开,它便会一个语句一个语句的执行,所以不需要担心啥
1 | mariadb -h192.168.0.102 -upi -p123456 -Dmytestdb <<EOF | sed -n '2p' |xargs -n1|sed -n '2,12p' |
可以将查询出来的数据进行过滤,这样就会直接显示出来,如果写的是个脚本,其实啥也得不到,所以得把输出存入变量。
1 | data=`mariadb -h192.168.0.102 -upi -p123456 -Dmytestdb <<EOF | sed -n '2p' |xargs -n1|sed -n '2,12p' |
这样便把数据存入了变量data中,数据库操作还是比较简单的。
ssh连接
这个就稍微复杂点了,因为它不像数据库那样,可以一次执行许多语句。而且最后得到数据也是比较麻烦,虽然我电脑上可以使用重定向来得到,但是公司的怎么写都不行,可能版本不同吧。为了连接主机后执行许多步骤那就得使用一个工具了:expect
expect
是一个工具套装,有它自己的语法,所以不能把它简简单单的看做只是一个shell命令。有的电脑上可能还没有这个东西,比如我的电脑。所以首先要安装它
1 | sudo pacman -S expect |
有了它就和使用sqlplus以及mariadb等的连接方式一样了,因为借助expect,可以执行许多命令。
网上看到许多教程,里面写的都是直接使用expect来为脚本解释的。例如
1 | !/usr/bin/expect |
这么写,我总觉得不是很好,除非我们就仅仅去连一下主机,然后也无法使用shell命令来操作得到的数据,因为它根本不是使用的shell来解释的,也可以理解为这不是一个shell脚本吧。除非我们再写一个shell脚本,在脚本中调用这个expect脚本。这样不是多此一举吗?所以来个大杂烩吧
1 | !/bin/bash |
如果是我的这个电脑的话是支持重定向的,就可以不用写log文件了,其实一样
1 | !/bin/bash |
然后就可以在本地对保存的文件进行数据提取和过滤了。