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