天天看點

100個必會的shell腳本_從執行個體來學習Linux shell腳本,附執行個體分享概述方法要點1、檢測伺服器是否開啟web服務(監聽80),并判斷服務種類2、檢測MySQL服務是否正常,判斷是主庫還是從庫,如是從庫判斷主從服務是否正常3、計算100以内所有能被3整除的正整數的和

概述

Linux Shell是一個很難的知識闆塊。雖然大家都認真學,基本的文法很都掌握,但有需求時,很難直接上手程式設計,要麼寫了很久,要麼寫不好!對于初學者而言,因為沒有實戰經驗,寫不出來Shell腳本很正常,如果工作了幾年的運維還是寫不出來,那就是沒主動找需求,缺乏練習,缺乏經驗。

方法要點

簡單介紹一下編寫shell腳本的時候的經驗和方法。

1.理清思路:在我們想實作一個功能需要寫腳本的時候是切忌不要想到就寫,避免需要什麼功能就先寫個什麼指令再去完善,這種寫法常常會出現在結構上很難調整的問題。在我們開始寫腳本之前一定要事先理清楚要怎麼去實作這個功能,包括用什麼指令和指令的先後順序。

2.全局觀:當我們理清腳本的思路之後,我們這個時候也不能馬上就開始寫,這個時候我們需要在腦海中思考每一個步驟中可能出現的情況,當出現各種情況後如何應對。在shell腳本中有可能我們要實作一個看似簡單的功能會需要有多個條件判斷,因為出現在我們目前系統上的情況隻是在衆多情況中的一種,我們要實作讓腳本在任何機器上都能正常運作就必須有“全局觀”。通俗講就是一個排除bug的過程。

3.心細如絲:正如大家感慨的一樣,shell腳本有非常多的引号括号空格,每一種意義不一樣,多個空格少個空格意義又不一樣,寫個幾十行的shell腳本能一次性寫完就無錯運作還是有一些難度的。我的在學習shell腳本一開始就強行給自己養成一個習慣,每寫完一行就檢查一次各種符号括号,剛開始速度非常慢,但是寫得多了速度就越來越快而且出錯率也越來越低,當養成習慣以後再去寫那些符号就成了習慣沒有剛開始那麼痛苦了。

4.好記性不如爛鍵盤:有一句不好聽的話雖然不好聽,但是能提醒到一些正在學習shell腳本的朋友說出來也挺好。當你在抱怨shell腳本如何難寫如何易出錯的時候那麼你總共寫過多少行shell?你敲過多少次鍵盤?

下面分享幾個shell腳本執行個體做練習。

1、檢測伺服器是否開啟web服務(監聽80),并判斷服務種類

#!/bin/bash#####################################################檢測伺服器是否開啟web服務(監聽80),并判斷服務種類#####################################################捕獲監聽80端口的服務名稱netstat -lntp|grep ":80"|awk -F '/' '{print $2}'|sort|uniq > /tmp/80.logn=`wc -l /tmp/80.log|awk '{print $1}'`s1=`cat /tmp/80.log`#判斷服務種類函數judge_server(){case $1 in httpd) echo "this server is apache";; nginx)echo "this server is nginx";; tomcat)echo "this server is tomcat";; *)echo "this server is other";;esac}if [ $n -eq 0 ] thenecho "no web server!" exit fiif [ $n -eq 1 ] thenjudge_server $s1 elseecho "there are $n web servers"for web in `cat /tmp/80.log`judge_server $webfi
           
100個必會的shell腳本_從執行個體來學習Linux shell腳本,附執行個體分享概述方法要點1、檢測伺服器是否開啟web服務(監聽80),并判斷服務種類2、檢測MySQL服務是否正常,判斷是主庫還是從庫,如是從庫判斷主從服務是否正常3、計算100以内所有能被3整除的正整數的和

2、檢測MySQL服務是否正常,判斷是主庫還是從庫,如是從庫判斷主從服務是否正常

#!/bin/bash###################################################################檢測MySQL服務是否正常,判斷是主庫還是從庫,如是從庫判斷主從服務是否正常##################################################################mysqlcmd="mysql -uroot -p123456"#判斷MySQL服務是否正常(正确執行MySQL指令)$mysqlcmd -e "show processlist"if [ $? -gt 0 ] then echo "this mysql is wrong." else #如果是從庫則有傳回值 $mysqlcmd -e "show slave statusG" > /tmp/sql.log n=`wc -l /tmp/sql.log|awk '{print $1}'` if [ $n -gt 0 ] then y1=`grep 'Slave_IO_Running:' /tmp/sql.log`|awk -F ':' '{print $2}'|sed 's/ //g'` y2=`grep 'Slave_SQL_Running:' /tmp/sql.log`|awk -F ':' '{print $2}'|sed 's/ //g'` if [ $y1 == "yes" ] && [ $y2 == "yes" ] then echo "the slave is ok" else echo "the slave is wrong"  fi fifi
           
100個必會的shell腳本_從執行個體來學習Linux shell腳本,附執行個體分享概述方法要點1、檢測伺服器是否開啟web服務(監聽80),并判斷服務種類2、檢測MySQL服務是否正常,判斷是主庫還是從庫,如是從庫判斷主從服務是否正常3、計算100以内所有能被3整除的正整數的和

3、計算100以内所有能被3整除的正整數的和

#!/bin/bash##############################################計算100以内所有能被3整除的正整數的和############################################sum=0for i in {1..100}do #求餘數 n=$[$i%3] if [ $n -eq 0 ] then sum=$[$sum+$i] fidoneecho "sum:$sum"
           
100個必會的shell腳本_從執行個體來學習Linux shell腳本,附執行個體分享概述方法要點1、檢測伺服器是否開啟web服務(監聽80),并判斷服務種類2、檢測MySQL服務是否正常,判斷是主庫還是從庫,如是從庫判斷主從服務是否正常3、計算100以内所有能被3整除的正整數的和

4、統計記憶體使用

#!/bin/bash##########################################計算一下linux系統所有程序占用記憶體大小的和#########################################count=0# 這個循環會周遊出每個程序占用的記憶體大小for i in `ps aux |awk '{print $6}' |grep -v 'RSS'`do # 将周遊出來的數字進行累加 count=$[$count+$i]done # 就得到所有程序占用記憶體大小的和了echo "$count/kb"
           
100個必會的shell腳本_從執行個體來學習Linux shell腳本,附執行個體分享概述方法要點1、檢測伺服器是否開啟web服務(監聽80),并判斷服務種類2、檢測MySQL服務是否正常,判斷是主庫還是從庫,如是從庫判斷主從服務是否正常3、計算100以内所有能被3整除的正整數的和

後面會分享更多devops和DBA方面内容,感興趣的朋友可以關注下!

100個必會的shell腳本_從執行個體來學習Linux shell腳本,附執行個體分享概述方法要點1、檢測伺服器是否開啟web服務(監聽80),并判斷服務種類2、檢測MySQL服務是否正常,判斷是主庫還是從庫,如是從庫判斷主從服務是否正常3、計算100以内所有能被3整除的正整數的和