一、編寫腳本的基本流程; 二、腳本的基礎知識; 三、腳本中變量的應用; 一、編寫腳本的基本流程; 1.shell腳本語言:幫助管理員實現(xiàn)批量化完成任務,結(jié)合計劃任務實現(xiàn)自動化運維; 2.編寫腳本的流程: a.創(chuàng)建目錄,集中存放腳本文件; b.編寫腳本內(nèi)容; vi 腳本名.sh ##編輯腳本文件 #!/bin/bash ##聲明解釋器 #注釋內(nèi)容 ##可以注釋些信息,方便后續(xù)查看 命令及控制語句 ##腳本的核心內(nèi)容 :wq ##保存文件 c.賦予腳本文件執(zhí)行權(quán)限:chmod +x 文件 d.運行腳本; 3.腳本的聲明:聲明使用哪種解釋器,cat /etc/shells文件中的所有解釋器都可以使用,解釋器可安裝; 4.執(zhí)行腳本的方式: a.路徑執(zhí)行(必須有執(zhí)行權(quán)限); 相對路徑 絕對路徑 b.source 腳本的絕對路徑或相對路徑(不需要執(zhí)行權(quán)限); c.sh -x 腳本的路徑(不需要執(zhí)行權(quán)限),并且會顯示命令和輸出結(jié)果; 二、腳本的基礎知識; 1. 重定向:改變了標準的輸入輸出狀態(tài); >:重定向輸出到某個位置,替換原有文件的所有內(nèi)容; >>:重定向追加輸出到某個位置,在原有文件的末尾添加內(nèi)容; <:重定向輸入某個位置的文件; 2>:重定向錯誤輸出; 2>>:重定向錯誤追加輸出到文件的末尾; &>:混合重定向輸出,正確錯誤的輸出結(jié)果都會輸出; 1,2>:同上; 2.管道符:將|前的命令的輸出結(jié)果作為管道|后的命令的輸入; 3.echo命令:返回結(jié)果并顯示; 語法:echo [選項] "需要返回的值" 選項: 選項-e 若出現(xiàn)特殊字符則不將其轉(zhuǎn)義,當普通字符對待; 在返回值中\(zhòng)n 代表強制換行、\t代表制表符; 內(nèi)容中的選項:"內(nèi)容\t內(nèi)容" 插入tab "內(nèi)容\n內(nèi)容" 強制換行 三、腳本中的變量的應用; 1.概述:變量是一個筐,筐里裝的是變量的值,只需要將筐帶走,那么值也就隨之帶走,值為可變; 2.優(yōu)點:簡化輸入,使腳本內(nèi)容更加清晰,提高腳本的適用性; 3.分類:自定義變量、環(huán)境變量、位置變量、預定義變量; 4.自定義變量的定義: a.定義變量:變量名=變量值 b.查看變量:echo $變量名 c.使用變量:在命令中直接使用 $變量名 d.取消變量:unset 變量名 e.變量的作用范圍: 局部變量:變量名=變量值,此種變量只能在當前bash中有效; 全局變量:export 變量名=變量值,此種變量在當前bash和當前子bash中有效; 注:可用 bash命令開啟當前進程的子進程bash,exit退回到父bash進程; f.變量值中使用的括號: "":弱引用,會將雙引號內(nèi)的特殊符號與命令一起執(zhí)行,例:A="ls -ld" '':強引用,會將單引號內(nèi)的$、"、\等特殊符號失效,例:B="$A /etc/ ",B='$A /etc/'; ``:在定義變量時,引用命令,在值中引用變量等同于$(),''不可嵌套,$()可以嵌套;例:A=`du -sh /etc/` $():在定義變量時,引用命令,可以嵌套;例:AC=$(rpm -qf $(which rz)) 注:當變量值中包含'單引號時,應使用\'將單引號進行轉(zhuǎn)義; g.變量名不能使用特殊符號,一般用大寫字母和下劃線; h.交互定義變量: read -p "提示文字信息" 變量的名稱 提示文字信息:123 echo $變量名 123 5.環(huán)境變量的定義: a.環(huán)境變量設置用戶工作環(huán)境,名稱不能修改,值可以修改; b.環(huán)境變量的常用: PATH=設置外部命令的存放的路徑,用冒號隔開 TMOUT=設置登錄超時,單位為秒 HISTSIZE=設置歷史命令記錄的條數(shù) LANG=設置語言環(huán)境(vi /etc/sysconfig/i18n 進行永久修改字符集) 注:設置臨時環(huán)境變量時(注銷就失效了):export PATH= c.環(huán)境變量的查看:env命令查看當前工作環(huán)境的所有環(huán)境變量; /etc/profile文件為用戶每次登陸執(zhí)行的的配置文件; 每個用戶家目錄中的.bash_profile是每個用戶獨立的環(huán)境變量配置文件; 6.位置變量和預定義變量: a.位置變量用于將腳本參數(shù)傳遞給腳本,有$1-$9,除命令或腳本本身外的所有; b.預定義變量:用戶只能使用,不能創(chuàng)建,不能直接賦值; $0:為腳本本身或命令本身 $*:為腳本后的所有參數(shù) $#:腳本參數(shù)數(shù)量統(tǒng)計 $?:上一條命令是否執(zhí)行成功,返回值為0則成功,否則失敗 注:在shell腳本中,所有的路徑必須為絕對路徑; ![]() 編寫腳本: 使用母盤克隆一個虛擬機,并命名為shell腳本測試機。 一.練習腳本的基本編寫流程: 1.確定任務及完成任務的命令 2.編寫腳本整合任務 3.授權(quán)并測試執(zhí)行 [root@www ~]# mkdir -p /root/bin [root@www ~]# cd /root/bin [root@www bin]# vi sysinfo.sh #!/bin/bash ##從/etc/shells中選擇一個shell解析下面的內(nèi)容 #by linuxfan #20160614 #system info. #我的第一個腳本,這是一個注釋 #查看網(wǎng)絡相關信息 ip a hostname cat /etc/hosts cat /etc/resolv.conf ip r #查看設備包括內(nèi)存、cpu、磁盤等使用情況 cat /proc/cpuinfo lscpu cat /proc/meminfo |grep -i total free cat /proc/partitions df -hT ##查看進程和服務情況 ps aux |wc -l service --status-all chkconfig --list |grep 3:on :wq [root@www bin]# chmod +x sysinfo.sh ##授權(quán) [root@www bin]# /root/bin/sysinfo.sh ##路徑執(zhí)行 [root@www bin]# sh -x sysinfo.sh ##測試時常用不需要執(zhí)行權(quán)限 [root@www tmp]# source sysinfo.sh ##一般用于讓配置文件生效等,不需要執(zhí)行權(quán)限 二.變量及管道的使用: 1.使用變量,編寫安裝apache的腳本: [root@www bin]# vim install_httpd.sh #!/bin/bash #by fage 2016-01-14 #install apache httpd! #############download httpd##### HV=httpd-2.2.17 wget ftp://ftp.linuxfan.cn/tools/$HV.tar.gz -P /root ##########解壓縮,并安裝############# tar zxvf /root/$HV.tar.gz -C /usr/src/ >/dev/null cd /usr/src/$HV/ ./configure --prefix=/usr/local/httpd --enable-so --enable-cgi --enable-rewrite --enable-ssl&&make &&make install &>/dev/null :wq 以此類推,編寫安裝mysql及php的腳本 chmod +x install_httpd.sh /root/bin/install_httpd.sh ##執(zhí)行腳本并安裝 ls /usr/local/httpd 2.練習重定向和管道: [root@www bin]#ip a |grep eth0 |grep inet |awk {'print $2'} |awk -F '/' {'print $1'} [root@www bin]# vim hosts.sh #!/bin/bash #2016-01-14 by linuxfan ##設置hosts解析,為www.linuxfan.cn IP=$(ip a |grep eth0 |grep inet |awk {'print $2'} |awk -F '/' {'print $1'}) read -p "input FQDN:" NANE echo "$IP $NANE" >>/etc/hosts :wq [root@www bin]#sh -x hosts.sh [root@www bin]#cat /etc/hosts ![]() ![]() 特殊變量及腳本的綜合應用 一.環(huán)境變量: [root@ns ~]# env ##查看所有的環(huán)境變量 [root@ns ~]# echo -e "1\n2" ##換行顯示 [root@ns ~]# echo -e "1\t2" ##在1和2之間加入tab顯示 [root@ns ~]# echo -e "$PATH\n $SHELL\n $HOSTNAME\n $MAIL\n $HISTSIZE\n\t $LANG" 注意:PATH為命令搜索路徑,SHELL為當前用戶使用的shell,HISTSIZE為歷史命令記錄條數(shù),LANG當前使用的語言 [root@ns ~]# export ##查看全局環(huán)境變量定義情況 [root@ns ~]# export.UTF-8 ##設置語言,如果需要設置為中文將值改為zh_CN.UTF-8 [root@ns ~]# locale ##查看語言設置 [root@ns ~]# unset HISTSIZE ##取消環(huán)境變量HISTSIZE [root@ns ~]# vim /etc/DIR_COLORS ##修改第81,128行的值如下 81 DIR 01;43 128 .xz 01;32 :wq [root@ns ~]# tar Jcf changecls.xz /etc/hosts ; mkdir dir ##創(chuàng)建測試文件和目錄 [root@ns ~]# exit ##注銷系統(tǒng),重新登錄驗證 [root@ns ~]# ls ##顏色已經(jīng)變了 [root@ns ~]# echo "export TMOUT=300" >>/etc/profile ##設置登陸超時TMOUT為永久生效的環(huán)境變量,注意只有寫入了文件的變量才是永久生效的 [root@ns ~]# source /etc/profile [root@ns ~]# sed -i 's/HISTSIZE=100/HISTSIZE=800/g' /etc/profile ##設置歷史命令條數(shù) [root@ns ~]# grep HIST /etc/profile |grep ^HI ##驗證 [root@ns ~]# source /etc/profile [root@ns ~]# echo $HISTSIZE 總結(jié):環(huán)境變量是為用戶設置的工作環(huán)境參數(shù)的變量,修改時先測試,再寫入文件。 二:位置變量和預定義變量: [root@ns bin]# vim position.sh ##編寫并理解位置變量和預定義變量 #!/bin/bash echo "This is \$0:$0" echo "This is \$1:$1" echo "This is \$2:$2" echo "This is \$3:$3" echo "This is \$4:$4" echo "This is \$5:$5" echo "This is \$6:$6" echo "This is \$7:$7" echo "This is \$8:$8" echo "This is \$9:$9" echo "This is \$#:$#" echo "This is \$*:$*" echo "This is \$?:$?" echo "$0 is exec complete! " :wq [root@ns bin]# chmod +x position.sh [root@ns bin]# /root/bin/position.sh a b c d e f g h x y z [root@ns bin]# vim bak.sh #!/bin/bash TF="/opt/benfen-$(date +%F).tar.gz" tar zcf $TF $* 1>/dev/null echo "\$0:exec $0 script." echo "\$#:total bakup $#." echo "\$*:bakup $*" echo "30 12 * * 7 /root/bin/bak.sh $*" >>/var/spool/cron/root :wq [root@ns bin]# chmod +x bak.sh [root@ns bin]# /root/bin/bak.sh /etc/yum.repos.d/ /etc/sysconfig /etc/hosts ##備份,并觀察$0,$#,$*的作用 三.編寫MySQL備份腳本: 1.準備數(shù)據(jù)庫: [root@www bin]# vim sql.sh ##在web服務器上編寫該腳本, #!/bin/bash ## by linuxfan.cn 2016.1.1 mysql -uroot -p123123 <<END create database studydb; create database coursedb; grant select,lock tables on studydb.* to operator@'192.168.100.151' identified by '123123'; grant select,lock tables on coursedb.* to operator@'192.168.100.151' identified by '123123' show grants for operator@'192.168.100.151'; END :wq 請完成下列操作后再執(zhí)行腳本: netstat -utpln |grep 3306 ##確認數(shù)據(jù)開啟 mysql -uroot -p123123 ##能登錄數(shù)據(jù)庫 chmod +x sql.sh ##授權(quán) 在上述腳本中使用變量,將可能隨著主機的IP,數(shù)據(jù)庫名稱,密碼,用戶名設置為變量后并替換掉相應的位置。 2.編寫備份數(shù)據(jù)的腳本: 在ca服務器上完成: [root@ca ~]# mkdir bin [root@ca ~]# cd bin/ [root@ca bin]# vim dbbak.sh #!/bin/bash ## by linuxfan.cn ## 2016.1.1 mkdir /opt/dbbak/ /usr/bin/mysqldump -uoperator -p123123 -h 192.168.100.150 --databases coursedb >/opt/dbbak/coursedb-$(date +%F-%H:%M).sql >/dev/null /usr/bin/mysqldump -uoperator -p123123 -h 192.168.100.150 --databases studydb >/opt/dbbak/studydb-$(date +%F-%H:%M).sql >/dev/null /bin/tar Jcf /opt/dbbak/coursedb-$(date +%F-%H:%M).tar.xz /opt/dbbak/coursedb-$(date +%F-%H:%M).sql --remove &>/dev/null /bin/tar Jcf /opt/dbbak/studydb-$(date +%F-%H:%M).tar.xz /opt/dbbak/studydb-$(date +%F-%H:%M).sql --remove &>/dev/null :wq 請完成下列操作后再執(zhí)行腳本: mount /dev/cdrom /mnt yum -y install mysql ##安裝mysql客戶端 mysql -uoperator -p123123 -h 192.168.100.150 ##登錄測試 mysqldump -uoperator -p123123 -h 192.168.100.150 --databases studydb >test.sql;ls ##查看是否能成功備份 在上述腳本中使用變量,將用戶,數(shù)據(jù)庫名稱,密碼,主機IP,時間,備份后的sql文件名稱,壓縮文件的名稱定義成變量,并替換相應的位置。 chmod +x dbbak.sh 腳本測試: sh -x dbbak.sh ls /opt/dbbak/ ##查看是否只有xz后綴的文件 測試成功后添加計劃任務: echo "30 2 * * * /root/bin/dbbak.sh" >>/var/spool/cron/root ![]() |
|