人人都能學(xué)會的企業(yè)SHELL編程_第1頁
人人都能學(xué)會的企業(yè)SHELL編程_第2頁
人人都能學(xué)會的企業(yè)SHELL編程_第3頁
人人都能學(xué)會的企業(yè)SHELL編程_第4頁
人人都能學(xué)會的企業(yè)SHELL編程_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、人人都能學(xué)會的企業(yè)SHELL編程人人都能學(xué)會的SHELL編程目 錄1.Shell入門簡介12.Shell編程之變量詳解43.If條件語句學(xué)習(xí)74.使用if條件語句編寫MySQL備份腳本105.IF條件綜合Shell實戰(zhàn)腳本編寫116.循環(huán)語句for197.循環(huán)語句while218.Until循環(huán)語句229.Case選擇語句2310.select選擇語句2411.Shell編程函數(shù)講解2512.Shell數(shù)組編程2613.Shell編程之a(chǎn)wk、sed命令案例分析2914.全備和增量備份Linux系統(tǒng)腳本編寫3015.Shell編程之IP匹配及磁盤郵件告警331. Shell入門簡介說到Shel

2、l編程,我想很多從事Linux運維工作的朋友都不陌生,都對Shell有基本的了解,可能大家剛開始接觸Shell的時候,有各種想法?能不能不學(xué)?高大上?到底是浮云?還是神馬?很難???我想告訴大家的是,大家有這些想法一點都不覺得驚訝,為什么?這些都很正常,對于任何一件事情在未開始之前,肯定會有總總假設(shè),那我今天想說的是,學(xué)完人人都會Shell編程后,我們會覺得一切的Shell都是浮云,我們每個人都能很好的使用它,駕馭它,更好的完成我們?nèi)粘_\維的工作。曾經(jīng)有人說過,玩Linux不知道Shell,那就是不懂Linux;現(xiàn)在細細品味確實是這樣。為了讓更多的人能接觸Shell、了解Shell,使用Shel

3、l,所以今天開設(shè)了這樣一個網(wǎng)絡(luò)課程,讓我們的Shell飛起來。好的,其他不多說了,我們正式進入主題,什么是Shell呢?Shell是操作系統(tǒng)的最外層,Shell可以合并編程語言以控制進程和文件,以及啟動和控制其它程序。shell 通過提示您輸入,向操作系統(tǒng)解釋該輸入,然后處理來自操作系統(tǒng)的任何結(jié)果輸出來管理您與操作系統(tǒng)之間的交互。簡單來說Shell就是一個用戶跟操作系統(tǒng)之間的一個命令解釋器。Shell是用戶與Linux操作系統(tǒng)之間溝通的橋梁。用戶可以輸入命令執(zhí)行,又可以利用 Shell腳本編程去運行。Linux Shell種類非常多,常見的有:Bourne Shell(/usr/bin/sh或

4、/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh)等。不同的Shell語言的語法有所不同,所以不能交換使用。最常用的shell是Bash,也就是Bourne Again Shell,由于易用和免費,Bash在日常工作中被廣泛使用,也是大多數(shù)Linux系統(tǒng)默認的Shell。接下來我們來寫一個簡單的shell腳本。(shell腳本一般文件名以.sh結(jié)尾,同時文件第一行定義該腳本為shell腳本)vi first_shell.sh#!/b

5、in/bash#This is my First shellecho “Hello World !”這就是我們的第一個腳本,是不是很簡單呢,注解如下:#!/bin/bash /表示定義該腳本是一個shell腳本(固定格式)。#This is my First shell /這里的#號屬于注解,沒有任何的意義,SHELL不會解析它。echo “Hello World !” /shell腳本主命令,我們執(zhí)行這個腳本講看到: Hello World ! 信息。腳本編寫完畢,如何來執(zhí)行呢,首先執(zhí)行shell腳本需要執(zhí)行權(quán)限,賦予執(zhí)行權(quán)限:chmod o+x first_shell.sh 然后./fir

6、st_shell.sh執(zhí)行即可;也可以直接使用命令執(zhí)行: /bin/sh first_shell.sh,顯示效果一樣。2. Shell編程之變量詳解Shell編程語言是非類型的解釋型語言,不像C+/JAVA語言編程時需要事先聲明變量,SHELL給一個變量賦值,實際上就是定義了變量,在Linux支持的所有shell中,都可以用賦值符號(=)為變量賦值。SHELL變量可分為兩類:局部變量和環(huán)境變量。局部變量只在創(chuàng)建它們的shell腳本中使用。而環(huán)境變量則可以在創(chuàng)建它們的shell及其派生出來的任意子進程中使用。有些變量是用戶創(chuàng)建的,其他的則是專用shell變量。例如在腳本里面定義A=123 ,定義

7、這樣一個變量,前面變量名,后面是變量的值。引用變量可以使用$A,把變量放在腳本里面會出現(xiàn)什么樣的效果呢?如下:#!/bin/bash#Author wugk 2014-06-10A=123echo “Printf variables equal is $A”執(zhí)行腳本:sh test.sh,結(jié)果將會顯示:Printf variables equal is 123簡單的理解變量,相當于定義一個別名-名稱,引用的時候加上$符號就可以了。例如定義變量 name=wuguangke 執(zhí)行echo $name 將會顯示wuguangke SHELL常見的系統(tǒng)變量解析:$0 當前程序的名稱$n 當前程序的第

8、n個參數(shù),n=1,2,9$* 當前程序的所有參數(shù)(不包括程序本身)$# 當前程序的參數(shù)個數(shù)(不包括程序本身)$? 命令或程序執(zhí)行完后的狀態(tài),一般返回0表示執(zhí)行成功。$UID 當前用戶的ID$PWD 當前所在的目錄我們來測試一個常用變量的腳本:vi auto_var.sh#!/bin/bash#auto print variables#by wugk 2014-09echo -e 03332m-0330mecho This is $0 param !echo This $1 is $1 param !echo This $2 is $2 param !echo -e 03332m-0330mec

9、ho This $* is $* param !echo This $# is $# param !echo This $? is $? param !echo緊接著我們來編寫一個簡單的echo打印菜單:#!/bin/bash#auto install httpd #by wugk 2014-09echo -e 03332m-0330mFILES=httpd-2.2.17.tar.bz2URL=PREFIX=/usr/local/apache2/echo -e 03336mPlease Select Install Menu:0330mechoecho 1)官方下載Httpd文件包.echo

10、2)解壓apache源碼包.echo 3)編譯安裝Httpd服務(wù)器.echo 4)啟動HTTPD服務(wù)器.echo -e 03332m-0330msleep 203. If條件語句學(xué)習(xí)在Linux Shell編程中,if、for、while、case等條件流程控制語句用的非常多,把這些學(xué)好,對提升腳本的功力有非常大的幫助。下面將逐個來講解具體的用法: If條件判斷語句if (表達式) #if ( Variable in Array )語句1else語句2fi案例一,測試數(shù)字大小#!/bin/shNUM=100if ( $NUM 4 ) ;then echo “this num is $NUM g

11、reater 4 !”fi案例二,測試目錄是否存在,不存在則新建(注意,中括號之間必須要空格)#!/bin/sh#judge dir existif ! -d /data/20140515 ;then mkdir -p /data/20140515 elseecho “This DIR is exist,Please exit .”fi邏輯運算符解析:-f 判斷文件是否存在 eg: if -f filename -d 判斷目錄是否存在 eg: if -d dir -eq等于 應(yīng)用于:整型比較-ne不等于 應(yīng)用于:整型比較-lt小于 應(yīng)用于:整型比較-gt大于 應(yīng)用于:整型比較-le小于或等于

12、應(yīng)用于:整型比較-ge大于或等于 應(yīng)用于:整型比較-a雙方都成立(and) 邏輯表達式 a 邏輯表達式-o單方成立(or) 邏輯表達式 o 邏輯表達式-z空字符串案例三,多個條件測試判斷#!/bin/shscores=80if $scores -gt 85 ; then echo very good!;elif $scores -gt 75 ; then echo good!;elif $scores -gt 60 ; then echo pass!;else echo no pass!fi4. 使用if條件語句編寫MySQL備份腳本a) 自動備份Mysql數(shù)據(jù)庫腳本#!/bin/sh #au

13、to backup mysql #wugk 2012-12-12 #Define PATH定義變量BAKDIR=/data/backup/mysql/date +%Y-%m-%dMYSQLDB=webappMYSQLPW=backupMYSQLUSR=backup#must use root user run scripts 必須使用root用戶運行,$UID為系統(tǒng)變量if $UID -ne 0 ;then echo This script must use the root user ! ! ! sleep 2 exit 0fi#Define DIR and mkdir DIR 判斷目錄是否

14、存在,不存在則新建if ! -d $BAKDIR ;then mkdir -p $BAKDIRelse echo This is $BAKDIR exists. fi#Use mysqldump backup mysql 使用mysqldump備份數(shù)據(jù)庫/usr/bin/mysqldump -u$MYSQLUSR -p$MYSQLPW -d $MYSQLDB $BAKDIR/webapp_db.sqlecho The mysql backup successfully 5. IF條件綜合Shell實戰(zhàn)腳本編寫通過if語句和之前變量的學(xué)習(xí),今天我們將把我們所學(xué)的綜合在一起來講解一個實戰(zhàn)運維腳本,

15、一鍵安裝LAMP環(huán)境的腳本:一鍵源碼安裝LAMP腳本,先分解腳本的各個功能:打印菜單:1)安裝apache WEB服務(wù)器2)安裝Mysql DB服務(wù)器3)安裝PHP 服務(wù)器4)整合LAMP架構(gòu)并啟動服務(wù)1、Apache服務(wù)器安裝部署。下載httpd-2.2.27.tar.gz版本,下載URL,解壓,進入安裝目錄,configure;make ;make install2、Mysql服務(wù)器的安裝。下載mysql-5.5.20.tar.bz2版本,下載URL,解壓,進入安裝目錄,configure;make ;make install3、PHP服務(wù)器安裝。下載php-5.3.8.tar.bz2版本

16、,下載URL,解壓,進入安裝目錄,configure;make ;make install4、LAMP架構(gòu)的整合和服務(wù)啟動。/usr/local/apache2/bin/apachectl startvi htdocs/index.phpvi auto_lamp.sh內(nèi)容如下:#!/bin/bash#auto install LAMP #by wugk 2014-11#Httpd define path variableH_FILES=httpd-2.2.27.tar.bz2H_FILES_DIR=httpd-2.2.27H_URL=H_PREFIX=/usr/local/apache2/#M

17、ySQL define path variableM_FILES=mysql-5.5.20.tar.gzM_FILES_DIR=mysql-5.5.20M_URL=M_PREFIX=/usr/local/mysql/#PHP define path variableP_FILES=php-5.3.28.tar.bz2P_FILES_DIR=php-5.3.28P_URL=P_PREFIX=/usr/local/php5/echo -e 03332m-0330mechoif -z $1 ;thenecho -e 03336mPlease Select Install Menu follow:03

18、30mecho -e 03332m1)編譯安裝Apache服務(wù)器0331mecho 2)編譯安裝MySQL服務(wù)器echo 3)編譯安裝PHP服務(wù)器echo 4)配置index.php并啟動LAMP服務(wù)echo -e 03331mUsage: /bin/sh $0 1|2|3|4|help0330mexitfiif $1 -eq help ;then echo -e 03336mPlease Select Install Menu follow:0330m echo -e 03332m1)編譯安裝Apache服務(wù)器0331m echo 2)編譯安裝MySQL服務(wù)器 echo 3)編譯安裝PHP服

19、務(wù)器 echo 4)配置index.php并啟動LAMP服務(wù) echo -e 03331mUsage: /bin/sh $0 1|2|3|4|help0330m exitfi#Install httpd web server if $1 -eq 1 ;thenwget -c $H_URL/$H_FILES & tar -jxvf $H_FILES & cd $H_FILES_DIR &./configure -prefix=$H_PREFIX if $? -eq 0 ;thenmake & make installecho -e n03332m-0330mecho -e 03332mThe $

20、H_FILES_DIR Server Install Success !0330melseecho -e 03332mThe $H_FILES_DIR Make or Make install ERROR,Please Check.exit 0fifi#Install Mysql DB server if $1 -eq 2 ;then wget -c $M_URL/$M_FILES & tar -xzvf $M_FILES & cd $M_FILES_DIR &yum install cmake -y ;cmake . -DCMAKE_INSTALL_PREFIX=$M_PREFIX -DMY

21、SQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 -DWITH_XTRADB_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_READLINE=1 -D

22、ENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BIG_TABLES=1 -DWITH_DEBUG=0make & make install/bin/cp support-files/my-f /etc/my.conf/bin/cp support-files/mysql.server /etc/init.d/mysqldchmod +x /etc/init.d/mysqldc

23、hkconfig -add mysqldchkconfig mysqld on if $? -eq 0 ;then make & make install echo -e n03332m-0330m echo -e 03332mThe $M_FILES_DIR Server Install Success !0330m else echo -e 03332mThe $M_FILES_DIR Make or Make install ERROR,Please Check. exit 0 fifi#Install PHP server if $1 -eq 3 ;then wget -c $P_UR

24、L/$P_FILES & tar -jxvf $P_FILES & cd $P_FILES_DIR &./configure -prefix=$P_PREFIX -with-config-file-path=$P_PREFIX/etc -with-mysql=$M_PREFIX -with-apxs2=$H_PREFIX/bin/apxs if $? -eq 0 ;then make ZEND_EXTRA_LIBS=-liconv & make install echo -e n03332m-0330m echo -e 03332mThe $P_FILES_DIR Server Install

25、 Success !0330m else echo -e 03332mThe $P_FILES_DIR Make or Make install ERROR,Please Check. exit 0 fifi#if $1 -eq 4 ;thensed -i /DirectoryIndex/s/index.html/index.php index.html/g $H_PREFIX/conf/httpd.conf $H_PREFIX/bin/apachectl restartecho AddType application/x-httpd-php .php $H_PREFIX/conf/httpd

26、.confIP=ifconfig eth1|grep Bcast|awk print $2|cut -d: -f2echo You can access http:/$IP/cat $H_PREFIX/htdocs/index.php EOFEOFFi6. 循環(huán)語句for For 變量 in 字符串do語句1done案例一,打印seq數(shù)字循環(huán)#!/bin/shfor i in seq 15doecho “NUM is $i”done案例二,求和1-100的值#!/bin/bash#auto sum 1 100j=0for (i=1;i=100;i+)do j=expr $i + $jdonee

27、cho $j案例三,找到相關(guān)log,然后批量打包#!/bin/shfor i in find /var/log -name “*.log”dotar czf 2014log.tgz $idone案例四,遠程主機批量傳輸文件:#!/bin/bash#auto scp files for client#by authors wugk 2014for i in seq 100 200do scp -r /tmp/test.txt root192.168.1.$i:/data/webapps/wwwDone案例五,遠程主機批量執(zhí)行命令:#!/bin/bash#auto scp files for cl

28、ient#by authors wugk 2014for i in seq 100 200do ssh -l root 192.168.1.$i ls /tmpdone7. 循環(huán)語句whilewhile 條件語句do語句1done案例一,while條件判斷數(shù)字 #!/bin/shi=1;while $i -lt 10 ;do echo $i; (i+);done;案例二,擴展講解linux read命令read -p Please Input number:案例三,while逐行讀取某個文件#!/bin/shwhile read linedo echo $line;done ifcfg-bon

29、d0EOFDEVICE=bond0BOOTPROTO=static$NETWORK1$NETWORK2$NETWORK3ONBOOT=yesTYPE=EthernetNM_CONTROLLED=noEOF如上腳本為定義三個數(shù)組變量,然后分別來引用,這樣讓腳本可讀性更強,更整潔。關(guān)于數(shù)組就簡單的介紹到這里。13. Shell編程之a(chǎn)wk、sed命令案例分析在我們?nèi)粘5腟hell編程中我們會用到很多的一些語句,有的語句,如果用好了,可以讓我們的腳本更上一層樓,讓我們的功能更容易滿足企業(yè)的需求。Sed命令:sed s/192/10/g test.txt 把文件里面的192字符替換為10在文件開頭或者

30、結(jié)尾添加字符:Awk命令:Find命令:Grep正則:14. 全備和增量備份Linux系統(tǒng)腳本在Linux中,我們經(jīng)常需要備份系統(tǒng)重要文件,例如/etc、/boot分區(qū)、重要網(wǎng)站數(shù)據(jù)等等,如果每天都完整備份的話,會占用很大的空間,那我們改如何來備份呢?這里采用如下方法來備份:每周日進行完整備份,其余每天為增量備份。那使用什么命令來備份呢,我們使用tar命令:全備份:tar -g /tmp/snapshot -czvf /tmp/2014_full_system_data.tar.gz /data/sh/增量備: tar -g /tmp/snapshot -czvf /tmp/2014_add0

31、1_system_data.tar.gz /data/sh/#!/bin/sh#Automatic Backup Linux System Files#Author wugk 2013-11-22#Define VariableSOURCE_DIR=( $*)TARGET_DIR=/data/backup/YEAR=date +%YMONTH=date +%mDAY=date +%dWEEK=date +%uA_NAME=date +%H%MFILES=system_backup.tgzCODE=$?if -z $* ;then echo -e 03332mUsage:nPlease Ente

32、r Your Backup Files or Directoriesn-nnUsage: $0 /boot /etc0330m exitfi#Determine Whether the Target Directory Existsif ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ;then mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY echo -e 03332mThe $TARGET_DIR Created Successfully !0330mfi#EXEC Full_Backup Function CommandFull_Bac

33、kup()if $WEEK -eq 7 ;then rm -rf $TARGET_DIR/snapshot cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES $SOURCE_DIR $CODE = 0 &echo -e -n03332mThese Full_Backup System Files Backup Successfully !0330mfi#Perform incremental BACKUP Function CommandAdd_Backup() if $WEEK -ne 7 ;

34、then cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $A_NAME$FILES $SOURCE_DIR $CODE = 0 &echo -e -n03332mThese Add_Backup System Files $TARGET_DIR/$YEAR/$MONTH/$DAY/$YEAR_$A_NAME$FILES Backup Successfully !0330m fisleep 3 Full_Backup;Add_Backup15. Shell編程之系統(tǒng)硬件信息數(shù)據(jù)庫收集首先我們創(chuàng)建數(shù)據(jù)庫表,格

35、式如下:CREATE TABLE audit_audit_system ( id int(11) NOT NULL AUTO_INCREMENT, ip_info varchar(50) NOT NULL, serv_info varchar(50) NOT NULL, cpu_info varchar(50) NOT NULL, disk_info varchar(50) NOT NULL, mem_info varchar(50) NOT NULL, load_info varchar(50) NOT NULL, mark_info varchar(50) NOT NULL, PRIMAR

36、Y KEY (id), UNIQUE KEY ip_info (ip_info), UNIQUE KEY ip_info_2 (ip_info) );然后編寫腳本如下:#!/bin/sh#auto get system info#author wugk 2014-08-29echo -e 03334m 0331mcat EOF+Welcome to use system Collect+EOFip_info=ifconfig |grep Bcast|tail -1 |awk print $2|cut -d: -f 2cpu_info1=cat /proc/cpuinfo |grep model n

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論