shell脚本自动重启linux服务器之易犯错的shell语法一二三

因为每周的上版工作实在单调苦恼,每一次服务器都需要单独执行手动重启工作,两台服务器工作量就是double了,而且容易出错,自己就搞了个shell脚本练练手用于每次自动执行服务器的重启工作。作为菜鸟撰写脚本时总是越到些细节又致命的问题,这里给大家分享下相关问题和一些知识点,后面的同学们也可以有前车之鉴,避免走弯路。

脚本整体逻辑比较基础,就是通过获取服务器ip判断是哪台服务器然后对相应的服务器执行相应的重启操作。

1、获取服务器IP

大家都知道ifconfig命令是linux中用于显示或配置网络设备(网络接口卡)的命令,如下图示

那问题简单了,ens192网卡中可以查看到inet的IP:172.18.6.20,那我们可以通过grep下inet然后输入第二列的数据即可输入该IP了。

ip=$(ifconfig "ens192" | grep "inet" | awk '{ print $2}' |head -n 1)

 

2、shell脚本中if的语法问题

这里要注意下if[]中的赋值符号两边和变量两边都需要有空格,具体写法可以参照上图,不然到时执行的时候一直报错command not found

3、函数的引用问题

最后就是函数的引用了,为了方便调用,我这边把之前一些零散的脚本封装到了函数中,通过相应的function函数去调用。但是调用的时候一直出错,也是一直显示命令不存在。后来我把定义的函数挪到了main的上边就没报错了。总之还是没找到问题,据我所知应该定义的函数在主体的上边或下边都可以的,大家如有知道的也可以互相交流。

 

如下是代码部分,给大家参考。

echo '==========================='
echo 'Choose an option '
echo '1 Automatically restart CNX in order'
echo '2 Automatically restart PEX in order'
echo '3 Automatically restart CNX&PEX in order '
read aNum
#ip=ifconfig|grep "inet addr:"|grep -v "127.0.0.1"|cut -d: -f2|awk '{print $1}'
#ip=$(ifconfig "ens192" | grep "inet addr" | awk '{ print $2}' | awk -F: '{print $2}')
#PROD ip=$(ifconfig "bond0" | grep "inet" | awk '{ print $2}' |head -n 1)
ip=$(ifconfig "ens192" | grep "inet" | awk '{ print $2}' |head -n 1)
echo $ip
modip1=172.18.6.20
modip2=172.18.6.17
if [ "$ip" = "$modip1" ];then
case $aNum in
  1)  
     autoRestartCNX1   
  ;;
  2) 
     autoRestartPEX1
  ;;
   3)  echo 'Automatic restart CNX&PEX soon do not close the process'
   autoRestartCNX1
   sleep 5s
   autoRestartPEX1
   ;;
   *)  echo '=============Exit============='
   ;;
esac
elif [ "$ip" = "$modip2" ];then
case $aNum in
   1)  
   autoRestartCNX2  
   ;;
   2)  autoRestartPEX2
   ;;
   3)  echo 'Automatic restart CNX&PEX soon do not close the process'
   autoRestartCNX2
   sleep 5s
   autoRestartPEX2
   ;;
   *)  echo '=============Exit============='
   ;;
esac
else
   echo 'Not Found Need IP'   
fi    

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shell脚本是一种用于编写批处理任务的脚本语言,可以自动化地执行一系列预定义的命令。在Linux服务器中,我们可以编写一个Shell脚本来实现自动登录服务器并执行命令的功能。 首先,我们需要使用ssh命令Shell脚本中建立与目标Linux服务器的ssh连接。可以使用以下命令: ``` ssh username@hostname ``` 其中,username是登录服务器的用户名,hostname是服务器的主机名或IP地址。需要在脚本中提供正确的用户名和主机名。 接下来,我们可以在脚本中编写需要在服务器上执行的命令,例如: ``` command1 command2 ``` 这里的command1和command2是需要执行的命令。可以根据实际需求编写自己的命令。 最后,我们将以上的ssh连接命令和需要执行的命令整合在一起,形成一个完整的脚本,例如: ``` #!/bin/bash ssh username@hostname << EOF command1 command2 EOF ``` 在这个例子中,EOF是一个分界符,用于定义需要在服务器上执行的命令的开始和结束。 当我们运行这个脚本时,它会自动登录到指定的Linux服务器,并按照脚本中编写的命令顺序执行。执行结果会在终端中显示。 需要注意的是,为了能够自动化执行,我们可能需要在脚本中配置ssh密钥认证,以免在每次执行脚本时都需要手动输入密码。 通过编写这样一个Shell脚本,我们可以实现自动登录Linux服务器并执行命令的功能,提高工作效率和自动化管理服务器的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值