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    

 

 

 

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