自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解Linux Shell腳本編寫(xiě)技巧,附實(shí)例說(shuō)明

系統(tǒng) Linux
Linux Shell是一個(gè)很難的知識(shí)板塊。雖然大家都認(rèn)真學(xué),基本的語(yǔ)法很都掌握,但有需求時(shí),很難直接上手編程。下面,簡(jiǎn)單介紹一下編寫(xiě)shell腳本的時(shí)候的經(jīng)驗(yàn)和方法。

Linux Shell是一個(gè)很難的知識(shí)板塊。雖然大家都認(rèn)真學(xué),基本的語(yǔ)法很都掌握,但有需求時(shí),很難直接上手編程,要么寫(xiě)了很久,要么寫(xiě)不好!對(duì)于初學(xué)者而言,因?yàn)闆](méi)有實(shí)戰(zhàn)經(jīng)驗(yàn),寫(xiě)不出來(lái)Shell腳本很正常,如果工作了幾年的運(yùn)維還是寫(xiě)不出來(lái),那就是沒(méi)主動(dòng)找需求,缺乏練習(xí),缺乏經(jīng)驗(yàn)。

方法要點(diǎn)

簡(jiǎn)單介紹一下編寫(xiě)shell腳本的時(shí)候的經(jīng)驗(yàn)和方法。

  • 理清思路:在我們想實(shí)現(xiàn)一個(gè)功能需要寫(xiě)腳本的時(shí)候是切忌不要想到就寫(xiě),避免需要什么功能就先寫(xiě)個(gè)什么命令再去完善,這種寫(xiě)法常常會(huì)出現(xiàn)在結(jié)構(gòu)上很難調(diào)整的問(wèn)題。在我們開(kāi)始寫(xiě)腳本之前一定要事先理清楚要怎么去實(shí)現(xiàn)這個(gè)功能,包括用什么命令和命令的先后順序。
  • 全局觀:當(dāng)我們理清腳本的思路之后,我們這個(gè)時(shí)候也不能馬上就開(kāi)始寫(xiě),這個(gè)時(shí)候我們需要在腦海中思考每一個(gè)步驟中可能出現(xiàn)的情況,當(dāng)出現(xiàn)各種情況后如何應(yīng)對(duì)。在shell腳本中有可能我們要實(shí)現(xiàn)一個(gè)看似簡(jiǎn)單的功能會(huì)需要有多個(gè)條件判斷,因?yàn)槌霈F(xiàn)在我們當(dāng)前系統(tǒng)上的情況只是在眾多情況中的一種,我們要實(shí)現(xiàn)讓腳本在任何機(jī)器上都能正常運(yùn)行就必須有“全局觀”。通俗講就是一個(gè)排除bug的過(guò)程。
  • 心細(xì)如絲:正如大家感慨的一樣,shell腳本有非常多的引號(hào)括號(hào)空格,每一種意義不一樣,多個(gè)空格少個(gè)空格意義又不一樣,寫(xiě)個(gè)幾十行的shell腳本能一次性寫(xiě)完就無(wú)錯(cuò)運(yùn)行還是有一些難度的。我的在學(xué)習(xí)shell腳本一開(kāi)始就強(qiáng)行給自己養(yǎng)成一個(gè)習(xí)慣,每寫(xiě)完一行就檢查一次各種符號(hào)括號(hào),剛開(kāi)始速度非常慢,但是寫(xiě)得多了速度就越來(lái)越快而且出錯(cuò)率也越來(lái)越低,當(dāng)養(yǎng)成習(xí)慣以后再去寫(xiě)那些符號(hào)就成了習(xí)慣沒(méi)有剛開(kāi)始那么痛苦了。
  • 好記性不如爛鍵盤(pán):有一句不好聽(tīng)的話(huà)雖然不好聽(tīng),但是能提醒到一些正在學(xué)習(xí)shell腳本的朋友說(shuō)出來(lái)也挺好。當(dāng)你在抱怨shell腳本如何難寫(xiě)如何易出錯(cuò)的時(shí)候那么你總共寫(xiě)過(guò)多少行shell?你敲過(guò)多少次鍵盤(pán)?

下面分享幾個(gè)shell腳本實(shí)例做練習(xí)。

1. 檢測(cè)服務(wù)器是否開(kāi)啟web服務(wù)(監(jiān)聽(tīng)80),并判斷服務(wù)種類(lèi)

  1. #!/bin/bash 
  2. #################################################### 
  3. #檢測(cè)服務(wù)器是否開(kāi)啟web服務(wù)(監(jiān)聽(tīng)80),并判斷服務(wù)種類(lèi) 
  4. #################################################### 
  5. #捕獲監(jiān)聽(tīng)80端口的服務(wù)名稱(chēng) 
  6. netstat -lntp|grep ":80"|awk -F '/' '{print $2}'|sort|uniq > /tmp/80.log 
  7. n=`wc -l /tmp/80.log|awk '{print $1}'` 
  8. s1=`cat /tmp/80.log` 
  9. #判斷服務(wù)種類(lèi)函數(shù) 
  10. judge_server() 
  11. case $1 in 
  12.  httpd) 
  13.  echo "this server is apache" 
  14.     ;; 
  15.  nginx) 
  16.     echo "this server is nginx" 
  17.     ;; 
  18.  tomcat) 
  19.     echo "this server is tomcat" 
  20.     ;; 
  21.  *) 
  22.     echo "this server is other" 
  23.     ;; 
  24. esac 
  25. if [ $n -eq 0 ] 
  26.  then 
  27.     echo "no web server!" 
  28.  exit  
  29. fi 
  30. if [ $n -eq 1 ] 
  31.  then 
  32.     judge_server $s1 
  33.  else 
  34.     echo "there are $n web servers" 
  35.     for web in `cat /tmp/80.log` 
  36.     judge_server $web 
  37. fi 

2. 檢測(cè)MySQL服務(wù)是否正常,判斷是主庫(kù)還是從庫(kù),如是從庫(kù)判斷主從服務(wù)是否正常

  1. #!/bin/bash 
  2. ################################################################## 
  3. #檢測(cè)MySQL服務(wù)是否正常,判斷是主庫(kù)還是從庫(kù),如是從庫(kù)判斷主從服務(wù)是否正常 
  4. ################################################################## 
  5. mysqlcmd="mysql -uroot -p123456" 
  6. #判斷MySQL服務(wù)是否正常(正確執(zhí)行MySQL命令) 
  7. $mysqlcmd -e "show processlist" 
  8. if [ $? -gt 0 ] 
  9.  then 
  10.  echo "this mysql is wrong." 
  11.  else 
  12.         #如果是從庫(kù)則有返回值 
  13.  $mysqlcmd -e "show slave status\G" > /tmp/sql.log 
  14.  n=`wc -l /tmp/sql.log|awk '{print $1}'` 
  15.  if [ $n -gt 0 ] 
  16.  then 
  17.  y1=`grep 'Slave_IO_Running:' /tmp/sql.log`|awk -F ':' '{print $2}'|sed 's/ //g'` 
  18.  y2=`grep 'Slave_SQL_Running:' /tmp/sql.log`|awk -F ':' '{print $2}'|sed 's/ //g'` 
  19.  if [ $y1 == "yes" ] && [ $y2 == "yes" ] 
  20.  then 
  21.  echo "the slave is ok" 
  22.  else 
  23.  echo "the slave is wrong"  
  24.  fi 
  25.  fi 
  26. fi 

3. 計(jì)算100以?xún)?nèi)所有能被3整除的正整數(shù)的和

  1. #!/bin/bash 
  2. ############################################# 
  3. #計(jì)算100以?xún)?nèi)所有能被3整除的正整數(shù)的和 
  4. ############################################ 
  5. sum=0 
  6. for i in {1..100} 
  7. do 
  8.  #求余數(shù) 
  9.  n=$[$i%3] 
  10.  if [ $n -eq 0 ] 
  11.  then 
  12.      sum=$[$sum+$i] 
  13.  fi 
  14. done 
  15. echo "sum:$sum" 

4. 統(tǒng)計(jì)內(nèi)存使用

  1. #!/bin/bash 
  2. ############################################# 
  3. #計(jì)算100以?xún)?nèi)所有能被3整除的正整數(shù)的和 
  4. ############################################ 
  5. sum=0 
  6. for i in {1..100} 
  7. do 
  8.  #求余數(shù) 
  9.  n=$[$i%3] 
  10.  if [ $n -eq 0 ] 
  11.  then 
  12.      sum=$[$sum+$i] 
  13.  fi 
  14. done 
  15. echo "sum:$sum" 

責(zé)任編輯:趙寧寧 來(lái)源: 今日頭條
相關(guān)推薦

2024-11-27 09:19:25

2023-05-20 17:45:25

LinuxShell

2017-08-11 17:20:07

LinuxShell

2013-12-02 09:49:59

2019-08-12 07:45:44

Linux腳本shell

2012-04-26 14:02:58

ibmdw

2022-06-21 09:26:21

Shell腳本JavaScript

2010-02-22 11:14:43

Python編寫(xiě)

2014-07-25 15:03:33

Linuxshellsed

2019-08-09 13:50:08

shellLinux

2009-12-08 17:48:28

Web Service

2019-09-12 08:32:40

Linuxsed命令語(yǔ)法

2017-06-19 15:46:08

LinuxBash腳本技巧

2017-08-15 11:32:21

LinuxBash腳本技巧

2019-12-12 10:23:34

Linux 代碼 開(kāi)發(fā)

2016-09-26 14:16:18

shell腳本bash

2021-08-02 07:50:42

腳本Shell日志

2021-05-11 07:50:31

BashShell腳本

2010-03-26 15:28:05

Python編寫(xiě)

2009-10-26 12:17:03

linux腳本編寫(xiě)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)