人人都能学会的企业SHELL编程v2

上传人:痛*** 文档编号:125515507 上传时间:2022-07-27 格式:DOC 页数:40 大小:517.50KB
收藏 版权申诉 举报 下载
人人都能学会的企业SHELL编程v2_第1页
第1页 / 共40页
人人都能学会的企业SHELL编程v2_第2页
第2页 / 共40页
人人都能学会的企业SHELL编程v2_第3页
第3页 / 共40页
资源描述:

《人人都能学会的企业SHELL编程v2》由会员分享,可在线阅读,更多相关《人人都能学会的企业SHELL编程v2(40页珍藏版)》请在装配图网上搜索。

1、人人都能学会的SHELL编程目 录1. Shell入门简介22. Shell编程之变量详解53. If条件语句学习84. 使用if条件语句编写MySQL备份脚本105. IF条件综合Shell实战脚本编写116. 循环语句for207. 循环语句while228. Until循环语句239. Case选择语句2310. select选择语句2511. Shell编程函数解说2512. Shell数组编程2713. Shell编程之awk、sed命令案例分析3014. 全备和增量备份Linux系统脚本3115. Shell编程之系统硬件信息数据库收集3416. Shell编程之磁盘报警高档脚本3

2、717. Shell编程之服务监控检查脚本4018. Shell编程之实战WEB界面展示一4019. Shell编程之实战WEB界面展示二4020. Shell编程之学习心得分享及拓展401. Shell入门简介说到Shell编程,我想诸多从事Linux运维工作的朋友都不陌生,都对Shell有基本的理解,也许人们刚开始接触Shell的时候,有多种想法?能不能不学?高大上?究竟是浮云?还是神马?很难啊?我想告诉人们的是,人们有这些想法一点都不觉得惊讶,为什么?这些都很正常,对于任何一件事情在未开始之前,肯定会有总总假设,那我今天想说的是,学完人人都会Shell编程后,我们会觉得一切的Shell都

3、是浮云,我们每个人都能较好的使用它,驾驭它,更好的完毕我们平常运维的工作。曾经有人说过,玩Linux不懂得Shell,那就是不懂Linux;目前细细品味的确是这样。为了让更多的人能接触Shell、理解Shell,使用Shell,因此今天开设了这样一种网络课程,让我们的Shell飞起来。好的,其她不多说了,我们正式进入主题,什么是Shell呢?Shell是操作系统的最外层,Shell可以合并编程语言以控制进程和文献,以及启动和控制其他程序。shell 通过提示您输入,向操作系统解释该输入,然后解决来自操作系统的任何成果输出来管理您与操作系统之间的交互。简朴来说Shell就是一种顾客跟操作系统之间

4、的一种命令解释器。Shell是顾客与Linux操作系统之间沟通的桥梁。顾客可以输入命令执行,又可以运用 Shell脚本编程去运营。Linux Shell种类非常多,常用的有:Bourne Shell(/usr/bin/sh或/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在平常

5、工作中被广泛使用,也是大多数Linux系统默认的Shell。接下来我们来写一种简朴的shell脚本。(shell脚本一般文献名以.sh结尾,同步文献第一行定义该脚本为shell脚本)vi first_shell.sh#!/bin/bash#This is my First shellecho “Hello World !”这就是我们的第一种脚本,是不是很简朴呢,注解如下:#!/bin/bash /表达定义该脚本是一种shell脚本(固定格式)。#This is my First shell /这里的#号属于注解,没有任何的意义,SHELL不会解析它。echo “Hello World !” /

6、shell脚本主命令,我们执行这个脚本讲看到: Hello World ! 信息。脚本编写完毕,如何来执行呢,一方面执行shell脚本需要执行权限,赋予执行权限:chmod o+x first_shell.sh 然后./first_shell.sh执行即可;也可以直接使用命令执行: /bin/sh first_shell.sh,显示效果同样。2. Shell编程之变量详解Shell编程语言是非类型的解释型语言,不像C+/JAVA语言编程时需要事先声明变量,SHELL给一种变量赋值,事实上就是定义了变量,在Linux支持的所有shell中,都可以用赋值符号(=)为变量赋值。SHELL变量可分为两

7、类:局部变量和环境变量。局部变量只在创立它们的shell脚本中使用。而环境变量则可以在创立它们的shell及其派生出来的任意子进程中使用。有些变量是顾客创立的,其她的则是专用shell变量。例如在脚本里面定义A=123 ,定义这样一种变量,前面变量名,背面是变量的值。引用变量可以使用$A,把变量放在脚本里面会浮现什么样的效果呢?如下:#!/bin/bash#Author wugk -06-10A=123echo “Printf variables equal is $A”执行脚本:sh test.sh,成果将会显示:Printf variables equal is 123简朴的理解变量,相称

8、于定义一种别名-名称,引用的时候加上$符号就可以了。例如定义变量 name=wuguangke 执行echo $name 将会显示wuguangke SHELL常用的系统变量解析:$0 目前程序的名称$n 目前程序的第n个参数,n=1,2,9$* 目前程序的所有参数(不涉及程序自身)$# 目前程序的参数个数(不涉及程序自身)$? 命令或程序执行完后的状态,一般返回0表达执行成功。$UID 目前顾客的ID$PWD 目前所在的目录我们来测试一种常用变量的脚本:vi auto_var.sh#!/bin/bash#auto print variables#by wugk -09echo -e 0333

9、2m-0330mecho This is $0 param !echo This $1 is $1 param !echo This $2 is $2 param !echo -e 03332m-0330mecho This $* is $* param !echo This $# is $# param !echo This $? is $? param !echo紧接着我们来编写一种简朴的echo打印菜单:#!/bin/bash#auto install httpd #by wugk -09echo -e 03332m-0330mFILES=httpd-2.2.17.tar.bz2URL=

10、PREFIX=/usr/local/apache2/echo -e 03336mPlease Select Install Menu:0330mechoecho 1)官方下载Httpd文献包.echo 2)解压apache源码包.echo 3)编译安装Httpd服务器.echo 4)启动HTTPD服务器.echo -e 03332m-0330msleep 203. If条件语句学习在Linux Shell编程中,if、for、while、case等条件流程控制语句用的非常多,把这些学好,对提高脚本的功力有非常大的协助。下面将逐个来解说具体的用法: If条件判断语句if (体现式) #if (

11、Variable in Array )语句1else语句2fi案例一,测试数字大小#!/bin/shNUM=100if ( $NUM 4 ) ;then echo “this num is $NUM greater 4 !”fi案例二,测试目录与否存在,不存在则新建(注意,中括号之间必须要空格)#!/bin/sh#judge dir existif ! -d /data/0515 ;then mkdir -p /data/0515 elseecho “This DIR is exist,Please exit .”fi逻辑运算符解析:-f 判断文献与否存在 eg: if -f filename

12、 -d 判断目录与否存在 eg: if -d dir -eq等于 应用于:整型比较-ne不等于 应用于:整型比较-lt不不小于 应用于:整型比较-gt不小于 应用于:整型比较-le不不小于或等于 应用于:整型比较-ge不小于或等于 应用于:整型比较-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 $score

13、s -gt 60 ; then echo pass!;else echo no pass!fi4. 使用if条件语句编写MySQL备份脚本a) 自动备份Mysql数据库脚本#!/bin/sh #auto backup mysql #wugk -12-12 #Define PATH定义变量BAKDIR=/data/backup/mysql/date +%Y-%m-%dMYSQLDB=webappMYSQLPW=backupMYSQLUSR=backup#must use root user run scripts 必须使用root顾客运营,$UID为系统变量if $UID -ne 0 ;then

14、 echo This script must use the root user ! ! ! sleep 2 exit 0fi#Define DIR and mkdir DIR 判断目录与否存在,不存在则新建if ! -d $BAKDIR ;then mkdir -p $BAKDIRelse echo This is $BAKDIR exists. fi#Use mysqldump backup mysql 使用mysqldump备份数据库/usr/bin/mysqldump -u$MYSQLUSR -p$MYSQLPW -d $MYSQLDB $BAKDIR/webapp_db.sqlech

15、o The mysql backup successfully 5. IF条件综合Shell实战脚本编写通过if语句和之前变量的学习,今天我们将把我们所学的综合在一起来解说一种实战运维脚本,一键安装LAMP环境的脚本:一键源码安装LAMP脚本,先分解脚本的各个功能:打印菜单:1)安装apache WEB服务器2)安装Mysql DB服务器3)安装PHP 服务器4)整合LAMP架构并启动服务1、Apache服务器安装部署。下载httpd-2.2.27.tar.gz版本,下载URL,解压,进入安装目录,configure;make ;make install2、Mysql服务器的安装。下载mysq

16、l-5.5.20.tar.bz2版本,下载URL,解压,进入安装目录,configure;make ;make install3、PHP服务器安装。下载php-5.3.8.tar.bz2版本,下载URL,解压,进入安装目录,configure;make ;make install4、LAMP架构的整合和服务启动。/usr/local/apache2/bin/apachectl startvi htdocs/index.phpvi auto_lamp.sh内容如下:#!/bin/bash#auto install LAMP #by wugk -11#Httpd define path varia

17、bleH_FILES=httpd-2.2.27.tar.bz2H_FILES_DIR=httpd-2.2.27H_URL=H_PREFIX=/usr/local/apache2/#MySQL 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/ph

18、p5/echo -e 03332m-0330mechoif -z $1 ;thenecho -e 03336mPlease Select Install Menu follow:0330mecho -e 03332m1)编译安装Apache服务器0331mecho 2)编译安装MySQL服务器echo 3)编译安装PHP服务器echo 4)配备index.php并启动LAMP服务echo -e 03331mUsage: /bin/sh $0 1|2|3|4|help0330mexitfiif $1 -eq help ;then echo -e 03336mPlease Select Insta

19、ll Menu follow:0330m echo -e 03332m1)编译安装Apache服务器0331m echo 2)编译安装MySQL服务器 echo 3)编译安装PHP服务器 echo 4)配备index.php并启动LAMP服务 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 -pr

20、efix=$H_PREFIX if $? -eq 0 ;thenmake & make installecho -e n03332m-0330mecho -e 03332mThe $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_F

21、ILES & cd $M_FILES_DIR &yum install cmake -y ;cmake . -DCMAKE_INSTALL_PREFIX=$M_PREFIX -DMYSQL_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_ENG

22、INE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_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 /e

23、tc/my.conf/bin/cp support-files/mysql.server /etc/init.d/mysqldchmod +x /etc/init.d/mysqldchkconfig -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

24、 install ERROR,Please Check. exit 0 fifi#Install PHP server if $1 -eq 3 ;then wget -c $P_URL/$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

25、=-liconv & make install echo -e n03332m-0330m echo -e 03332mThe $P_FILES_DIR Server Install 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

26、_PREFIX/bin/apachectl restartecho AddType application/x-httpd-php .php $H_PREFIX/conf/httpd.confIP=ifconfig eth1|grep Bcast|awk print $2|cut -d: -f2echo You can access http:/$IP/cat $H_PREFIX/htdocs/index.php EOFEOFFi6. 循环语句for For 变量 in 字符串do语句1done案例一,打印seq数字循环#!/bin/shfor i in seq 15doecho “NUM i

27、s $i”done案例二,求和1-100的值#!/bin/bash#auto sum 1 100j=0for (i=1;i=100;i+)do j=expr $i + $jdoneecho $j案例三,找到有关log,然后批量打包#!/bin/shfor i in find /var/log -name “*.log”dotar czf log.tgz $idone案例四,远程主机批量传播文献:#!/bin/bash#auto scp files for client#by authors wugk for i in seq 100 200do scp -r /tmp/test.txt .1.

28、$i:/data/webapps/wwwDone案例五,远程主机批量执行命令:#!/bin/bash#auto scp files for client#by authors wugk for i in seq 100 200do ssh -l root 192.168.1.$i ls /tmpdone7. 循环语句whilewhile 条件语句do语句1done案例一,while条件判断数字 #!/bin/shi=1;while $i -lt 10 ;do echo $i; (i+);done;案例二,扩展解说linux read命令read -p Please Input number:案

29、例三,while逐行读取某个文献#!/bin/shwhile read linedo echo $line;done ifcfg-bond0EOFDEVICE=bond0BOOTPROTO=static$NETWORK1$NETWORK2$NETWORK3ONBOOT=yesTYPE=EthernetNM_CONTROLLED=noEOF如上脚本为定义三个数组变量,然后分别来引用,这样让脚本可读性更强,更整洁。有关数组就简朴的简介到这里。13. Shell编程之awk、sed命令案例分析在我们平常的Shell编程中我们会用到诸多的某些语句,有的语句,如果用好了,可以让我们的脚本更上一层楼,让我

30、们的功能更容易满足公司的需求。Sed命令:sed s/192/10/g test.txt 把文献里面的192字符替代为10在文献开头或者结尾添加字符:Awk命令:Find命令:Grep正则:14. 全备和增量备份Linux系统脚本在Linux中,我们常常需要备份系统重要文献,例如/etc、/boot分区、重要网站数据等等,如果每天都完整备份的话,会占用很大的空间,那我们改如何来备份呢?这里采用如下措施来备份:每周日进行完整备份,其他每天为增量备份。那使用什么命令来备份呢,我们使用tar命令:全备份:tar -g /tmp/snapshot -czvf /tmp/_full_system_dat

31、a.tar.gz /data/sh/增量备: tar -g /tmp/snapshot -czvf /tmp/_add01_system_data.tar.gz /data/sh/#!/bin/sh#Automatic Backup Linux System Files#Author wugk -11-22#Define VariableSOURCE_DIR=( $*)TARGET_DIR=/data/backup/YEAR=date +%YMONTH=date +%mDAY=date +%dWEEK=date +%uA_NAME=date +%H%MFILES=system_backup.t

32、gzCODE=$?if -z $* ;then echo -e 03332mUsage:nPlease Enter 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 Success

33、fully !0330mfi#EXEC Full_Backup Function CommandFull_Backup()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 incremen

34、tal BACKUP Function CommandAdd_Backup() if $WEEK -ne 7 ;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 F

35、ull_Backup;Add_Backup15. Shell编程之系统硬件信息数据库收集一方面我们创立数据库表,格式如下: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 var

36、char(50) NOT NULL, mark_info varchar(50) NOT NULL, PRIMARY KEY (id), UNIQUE KEY ip_info (ip_info), UNIQUE KEY ip_info_2 (ip_info) );然后编写脚本如下:#!/bin/sh#auto get system info#author wugk -08-29echo -e 03334m 0331mcat EOF+Welcome to use system Collect+EOFip_info=ifconfig |grep Bcast|tail -1 |awk print $

37、2|cut -d: -f 2cpu_info1=cat /proc/cpuinfo |grep model name|tail -1 |awk -F: print $2|sed s/ /g|awk print $1,$3,$4,$NFcpu_info2=cat /proc/cpuinfo |grep physical id|sort |uniq -c|wc -lserv_info=hostname |tail -1disk_info=fdisk -l|grep Disk|grep -v identifier|awk print $2,$3,$4|sed s/,/gmem_info=free -

38、m |grep Mem|awk print Total,$1,$2Mload_info=uptime |awk print Current Load: $(NF-2)|sed s/,/gmark_info=BeiJing_IDCecho -e 03332m-0331mecho IPADDR:$ip_infoecho HOSTNAME:$serv_infoecho CPU_INFO:$cpu_info1 X$cpu_info2echo DISK_INFO:$disk_infoecho MEM_INFO:$mem_infoecho LOAD_INFO:$load_infoecho -e 03332

39、m-0330mecho -e -n 03336mYou want to write the data to the databases? 0331m ;read ensureif $ensure = yes -o $ensure = y -o $ensure = Y ;thenecho -echo -e 03331mmysql -uaudit -p123456 -D audit -e insert into audit_audit_system values(,$ip_info,$serv_info,$cpu_info1 X$cpu_info2,$disk_info,$mem_info,$lo

40、ad_info,$mark_info) 0330m elseecho wait exit.exitfi读取数据库信息:mysql -uroot -p123 -e use wugk1 ;select * from audit_audit_system;|sed s/-/g|grep -v id这样,我们可以把数据库的内容在shell脚本里面调用出来。16. Shell编程之磁盘报警高档脚本脚本分析:1、 磁盘达到85%发送报警邮件。2、 发送邮件命令格式。3、 多种报警设立。4、 把分区的信息写入文献。Mail -s “邮件主题” -c”抄送地址” -b “密送地址” -f 发送人邮件地址 F

41、发件人姓名 list.txtcat email.txt EOF* Email *告知类型: 故障服务 : Disk Monitor 主机: $IP_ADDR状态: 警告 日期/时间: 周二 11月11日 15时:15分:53秒 CST额外信息:CRITICAL - DISK Monitor:$D_Name Used more than $D_Percent% EOFEOF echo -e 03332mThe $D_Name has been used for more than $D_Percent% ,Please Check.0330mmail -s $D_Name Warning email.txt #echo The $D_Name has been used for more than $D_Percent% ,Please Check.|mail -s $D_Name Warning fidone list.txtecho -e n03332m-0331mecho Done.17. Shell编程之服务监控检查脚本18. Shell编程之实战WEB界面展示一19. Shell编程之实战WEB界面展示二20. Shell编程之学习心得分享及拓展

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!