小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

shell編程規(guī)范及變量

 夜貓速讀 2022-05-16

一、編寫(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

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多