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    

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章