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

上传人:无*** 文档编号:100427602 上传时间:2022-06-02 格式:DOC 页数:33 大小:87.50KB
收藏 版权申诉 举报 下载
人人都能学会的企业SHELL编程_第1页
第1页 / 共33页
人人都能学会的企业SHELL编程_第2页
第2页 / 共33页
人人都能学会的企业SHELL编程_第3页
第3页 / 共33页
资源描述:

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

1、-人人都能学会的SHELL编程目 录1.Shell入门简介12.Shell编程之变量详解43.If条件语句学习74.使用if条件语句编写MySQL备份脚本105.IF条件综合Shell实战脚本编写116.循环语句for197.循环语句while218.Until循环语句229.Case选择语句2310.select选择语句2411.Shell编程函数讲解2512.Shell数组编程2613.Shell编程之awk、sed命令案例分析2914.全备和增量备份Linu*系统脚本编写3015.Shell编程之IP匹配及磁盘告警331. Shell入门简介说到Shell编程,我想很多从事Linu*运维

2、工作的朋友都不陌生,都对Shell有根本的了解,可能大家刚开场接触Shell的时候,有各种想法?能不能不学?高大上?到底是浮云?还是神马?很难啊?我想告诉大家的是,大家有这些想法一点都不觉得惊讶,为什么?这些都很正常,对于任何一件事情在未开场之前,肯定会有总总假设,那我今天想说的是,学完人人都会Shell编程后,我们会觉得一切的Shell都是浮云,我们每个人都能很好的使用它,驾驭它,更好的完成我们日常运维的工作。曾经有人说过,玩Linu*不知道Shell,那就是不懂Linu*;现在细细品味确实是这样。为了让更多的人能接触Shell、了解Shell,使用Shell,所以今天开设了这样一个网络课程

3、,让我们的Shell飞起来。好的,其他不多说了,我们正式进入主题,什么是Shell呢?Shell是操作系统的最外层,Shell可以合并编程语言以控制进程和文件,以及启动和控制其它程序。shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出来管理您与操作系统之间的交互。简单来说Shell就是一个用户跟操作系统之间的一个命令解释器。Shell是用户与Linu*操作系统之间沟通的桥梁。用户可以输入命令执行,又可以利用 Shell脚本编程去运行。Linu* Shell种类非常多,常见的有:Bourne Shell/usr/bin/sh或/bin/sh、Bourne Aga

4、in 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在日常工作中被广泛使用,也是大多数Linu*系统默认的Shell。接下来我们来写一个简单的shell脚本。(shell脚本一般文件名以.sh结尾,同时文件第一行定义该脚本为shell脚本)vi first_shell.sh#!/bin/bash#This is my First sh

5、ellecho Hello World !这就是我们的第一个脚本,是不是很简单呢,注解如下:#!/bin/bash /表示定义该脚本是一个shell脚本固定格式。#This is my First shell /这里的#号属于注解,没有任何的意义,SHELL不会解析它。echo Hello World ! /shell脚本主命令,我们执行这个脚本讲看到: Hello World ! 信息。脚本编写完毕,如何来执行呢,首先执行shell脚本需要执行权限,赋予执行权限:chmod o+* first_shell.sh 然后./first_shell.sh执行即可;也可以直接使用命令执行: /bin

6、/sh first_shell.sh,显示效果一样。2. Shell编程之变量详解Shell编程语言是非类型的解释型语言,不像C+/JAVA语言编程时需要事先声明变量,SHELL给一个变量赋值,实际上就是定义了变量,在Linu*支持的所有shell中,都可以用赋值符号(=)为变量赋值。SHELL变量可分为两类:局部变量和环境变量。局部变量只在创立它们的shell脚本中使用。而环境变量则可以在创立它们的shell及其派生出来的任意子进程中使用。有些变量是用户创立的,其他的则是专用shell变量。例如在脚本里面定义A=123 ,定义这样一个变量,前面变量名,后面是变量的值。引用变量可以使用$A,把

7、变量放在脚本里面会出现什么样的效果呢?如下:#!/bin/bash#Author wugk 2014-06-10A=123echo Printf variables equal is $A执行脚本:sh test.sh,结果将会显示:Printf variables equal is 123简单的理解变量,相当于定义一个别名-名称,引用的时候加上$符号就可以了。例如定义变量 name=wuguangke 执行echo $name 将会显示wuguangke SHELL常见的系统变量解析:$0 当前程序的名称$n 当前程序的第n个参数,n=1,2,9$* 当前程序的所有参数(不包括程序本身)$#

8、 当前程序的参数个数(不包括程序本身)$ 命令或程序执行完后的状态,一般返回0表示执行成功。$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-0330mecho This $* is $* param !echo This $#

9、 is $# param !echo This $ is $ param !echo紧接着我们来编写一个简单的echo打印菜单:#!/bin/bash#auto install d #by wugk 2014-09echo -e 03332m-0330mURL=mirrors.nic./apache/ d/PREFI*=/usr/local/apache2/echo -e 03336mPlease Select Install Menu:0330mechoecho 1)官方下载 d文件包.echo 2)解压apache源码包.echo 3)编译安装 d效劳器.echo 4)启动 D效劳器.ec

10、ho -e 03332m-0330msleep 203. If条件语句学习在Linu* Shell编程中,if、for、while、case等条件流程控制语句用的非常多,把这些学好,对提升脚本的功力有非常大的帮助。下面将逐个来讲解具体的用法: If条件判断语句if (表达式) #if ( Variable in Array )语句1else语句2fi案例一,测试数字大小#!/bin/shNUM=100if ( $NUM 4 ) ;then echo this num is $NUM greater 4 !fi案例二,测试目录是否存在,不存在则新建注意,中括号之间必须要空格#!/bin/sh#j

11、udge dir e*istif ! -d /data/20140515 ;then mkdir -p /data/20140515 elseecho This DIR is e*ist,Please e*it .fi逻辑运算符解析:-f 判断文件是否存在 eg: if -f filename -d 判断目录是否存在 eg: if -d dir -eq等于 应用于:整型比拟-ne不等于 应用于:整型比拟-lt小于 应用于:整型比拟-gt大于 应用于:整型比拟-le小于或等于 应用于:整型比拟-ge大于或等于 应用于:整型比拟-a双方都成立and 逻辑表达式 a 逻辑表达式-o单方成立or 逻辑

12、表达式 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数据库脚本#!/bin/sh #auto backup mysql #wugk 2012-12-12 #Define PATH定义变量BAKDIR=/data/ba

13、ckup/mysql/date +%Y-%m-%dMYSQLDB=webappMYSQLPW=backupMYSQLUSR=backup#must use root user run scripts 必须使用root用户运行,$UID为系统变量if $UID -ne 0 ;then echo This script must use the root user ! ! ! sleep 2 e*it 0fi#Define DIR and mkdir DIR 判断目录是否存在,不存在则新建if ! -d $BAKDIR ;then mkdir -p $BAKDIRelse echo This is

14、 $BAKDIR e*ists. fi#Use mysqldump backup mysql 使用mysqldump备份数据库/usr/bin/mysqldump -u$MYSQLUSR -p$MYSQLPW -d $MYSQLDB $BAKDIR/webapp_db.sqlecho The mysql backup successfully 5. IF条件综合Shell实战脚本编写通过if语句和之前变量的学习,今天我们将把我们所学的综合在一起来讲解一个实战运维脚本,一键安装LAMP环境的脚本:一键源码安装LAMP脚本,先分解脚本的各个功能:打印菜单:1安装apache WEB效劳器2安装My

15、sql DB效劳器3安装PHP 效劳器4整合LAMP架构并启动效劳1、Apache效劳器安装部署。下载 d-2.2.27.tar.gz版本,下载URL,解压,进入安装目录,configure;make ;make install2、Mysql效劳器的安装。下载mysql-5.5.20.tar.bz2版本,下载URL,解压,进入安装目录,configure;make ;make install3、PHP效劳器安装。下载php-5.3.8.tar.bz2版本,下载URL,解压,进入安装目录,configure;make ;make install4、LAMP架构的整合和效劳启动。/usr/loca

16、l/apache2/bin/apachectl startvi htdocs/inde*.phpvi auto_lamp.sh容如下:#!/bin/bash#auto install LAMP #by wugk 2014-11# d define path variableH_URL=mirrors.nic./apache/ d/H_PREFI*=/usr/local/apache2/#MySQL define path variableM_PREFI*=/usr/local/mysql/#PHP define path variableP_URL=mirrors.sohu./php/P_PR

17、EFI*=/usr/local/php5/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)配置inde*.php并启动LAMP效劳echo -e 03331mUsage: /bin/sh $0 1|2|3|4|help0330me*itfiif $1 -eq help ;then echo -e 03336mP

18、lease Select Install Menu follow:0330m echo -e 03332m1)编译安装Apache效劳器0331m echo 2)编译安装MySQL效劳器 echo 3)编译安装PHP效劳器 echo 4)配置inde*.php并启动LAMP效劳 echo -e 03331mUsage: /bin/sh $0 1|2|3|4|help0330m e*itfi#Install d web server if $1 -eq 1 ;thenwget -c $H_URL/$H_FILES & tar -j*vf $H_FILES & cd $H_FILES_DIR &.

19、/configure -prefi*=$H_PREFI* 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.e*it 0fifi#Install Mysql DB server if $1 -eq 2 ;then wget -c $M_URL/$M_FILES & t

20、ar -*zvf $M_FILES & cd $M_FILES_DIR &yum install cmake -y ;cmake . -DCMAKE_INSTALL_PREFI*=$M_PREFI* -DMYSQL_UNI*_ADDR=/tmp/mysql.sock -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 -DWITH_*TRADB_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITIO

21、N_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DWITH_E*TRA_CHARSETS=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DE*TRA_CHARSETS=all -DWITH_BIG_TABLES=1 -DWITH_DEBUG=0make & make install/bin/cp support-

22、files/my-small.f /etc/my.conf/bin/cp support-files/mysql.server /etc/init.d/mysqldchmod +* /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_FILE

23、S_DIR Make or Make install ERROR,Please Check. e*it 0 fifi#Install PHP server if $1 -eq 3 ;then wget -c $P_URL/$P_FILES & tar -j*vf $P_FILES & cd $P_FILES_DIR &./configure -prefi*=$P_PREFI* -with-config-file-path=$P_PREFI*/etc -with-mysql=$M_PREFI* -with-ap*s2=$H_PREFI*/bin/ap*s if $ -eq 0 ;then mak

24、e ZEND_E*TRA_LIBS=-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. e*it 0 fifi#if $1 -eq 4 ;thensed -i /DirectoryInde*/s/inde*.html/inde*.php inde*.html/g $H_PREFI*/c

25、onf/ d.conf $H_PREFI*/bin/apachectl restartecho AddType application/*- d-php .php $H_PREFI*/conf/ d.confIP=ifconfig eth1|grep Bcast|awk print $2|cut -d: -f2echo You can access $IP/cat $H_PREFI*/htdocs/inde*.php EOFEOFFi6. 循环语句forFor 变量 in 字符串do语句1done案例一,打印seq数字循环#!/bin/shfor i in seq 15doecho NUM i

26、s $idone案例二,求和1-100的值#!/bin/bash#auto sum 1 100j=0for (i=1;i=100;i+)do j=e*pr $i + $jdoneecho $j案例三,找到相关log,然后批量打包#!/bin/shfor i in find /var/log -name *.logdotar czf 2014log.tgz $idone案例四,远程主机批量传输文件:#!/bin/bash#auto scp files for client#by authors wugk 2014for i in seq 100 200do scp -r /tmp/test.t*

27、t root192.168.1.$i:/data/webapps/Done案例五,远程主机批量执行命令:#!/bin/bash#auto scp files for client#by authors wugk 2014for 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;案例二,扩展讲解linu* read命令read -p Plea

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

29、,可以让我们的脚本更上一层楼,让我们的功能更容易满足企业的需求。Sed命令:sed s/192/10/g test.t*t 把文件里面的192字符替换为10在文件开头或者结尾添加字符:Awk命令:Find命令:Grep正则:14. 全备和增量备份Linu*系统脚本在Linu*中,我们经常需要备份系统重要文件,例如/etc、/boot分区、重要数据等等,如果每天都完整备份的话,会占用很大的空间,那我们改如何来备份呢?这里采用如下方法来备份:每周日进展完整备份,其余每天为增量备份。那使用什么命令来备份呢,我们使用tar命令:全备份:tar -g /tmp/snapshot -czvf /tmp/2

30、014_full_system_data.tar.gz /data/sh/增量备: tar -g /tmp/snapshot -czvf /tmp/2014_add01_system_data.tar.gz /data/sh/#!/bin/sh#Automatic Backup Linu* 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

31、 +%H%MFILES=system_backup.tgzCODE=$if -z $* ;then echo -e 03332mUsage:nPlease Enter Your Backup Files or Directoriesn-nnUsage: $0 /boot /etc0330m e*itfi#Determine Whether the Target Directory E*istsif ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ;then mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY echo -e 03332mThe $

32、TARGET_DIR Created Successfully !0330mfi#E*EC Full_Backup Function mandFull_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 !0

33、330mfi#Perform incremental BACKUP Function mandAdd_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 Successfull

34、y !0330m fisleep 3 Full_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

35、NULL, load_info varchar(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 2014-08-29echo -e 03334m 0331mcat EOF+Wele to use system Collect+EOFip_info=ifconfig |grep Bcast|

36、tail -1 |awk print $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

37、s/,/gmem_info=free -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 *$cpu_info2echo DISK_INFO:$disk_infoecho MEM_INFO:$mem_infoecho LOAD_INFO:$lo

38、ad_infoecho -e 03332m-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 *$cpu_info2,$disk

39、_info,$mem_info,$load_info,$mark_info) 0330m elseecho wait e*it.e*itfi读取数据库信息:mysql -uroot -p123 -e use wugk1 ;select * from audit_audit_system;|sed s/-/g|grep -v id这样,我们可以把数据库的容在shell脚本里面调用出来。16. Shell编程之磁盘报警高级脚本Mail -s 主题-c抄送地址 -b 密送地址-f 发送人地址 F 发件人 要发送的容17. Shell编程之效劳监控检查脚本18. Shell编程之实战WEB界面展示一19. Shell编程之实战WEB界面展示二20. Shell编程之学习心得分享及拓展. z

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