1-22-跳出循环-shift左移-函数的使用和数据库自动备份脚本-v1.docx
《1-22-跳出循环-shift左移-函数的使用和数据库自动备份脚本-v1.docx》由会员分享,可在线阅读,更多相关《1-22-跳出循环-shift左移-函数的使用和数据库自动备份脚本-v1.docx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本节所讲内容:q Shift参数左移指令q shell中函数使用方法q shell脚本实战:mysql自动备份和自动解压ZIP文件脚本第1章 Shift参数左移指令shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本)在扫描处理脚本程序的参数时,经常要用到的shift命令,如果你的脚本需要10个或10个以上的参数,你就需要用shift命令来访问第10个及其后面的参数u 作用:每执行一次,参数序列顺次左移一个位置,$#的值减1,用于分别处理每个参数,移出去的参数,不再可用u 补充位置参数:位置参数, 从
2、命令行传递到脚本, 或者传递给函数, 或者set给变量$#命令行参数 或者位置参数的个数$*所有的位置参数都被看作为一个单词。 $*必须被引用起来$与$*相同,但是每个参数都是一个独立的引用字符串, 这就意味着, 参数是被完整传递的, 并没有被解释或扩展。这也意味着:参数列表中每个参数都被看作为单独的单词。$也应该被引用起来范例1:依次读取输入的参数并打印参数个数rootserver0 opt# cat 1.sh#!/bin/bashwhile $# != 0 ;doecho 第一个参数为:$1 ,参数的个数为:$#shiftdonerootserver0 opt# sh 1.sh a b c
3、 d e f g第一个参数为:a ,参数的个数为:7第一个参数为:b ,参数的个数为:6第一个参数为:c ,参数的个数为:5第一个参数为:d ,参数的个数为:4第一个参数为:e ,参数的个数为:3第一个参数为:f ,参数的个数为:2第一个参数为:g ,参数的个数为:1从上面结果可以看到: shift (shift 1)命令每执行一次,变量的个数($#)减一(之前的$1变量被销毁之后的$2就变成了$1),而变量值提前一位。同理,shift n后,前n位参数都会被销毁,比如我们输入了5个参数为:a、 b、 c 、d、 e,那么对应的位置变量为:$1=a,$2=b,$3=c,$4=d,$5=e,我们
4、在执行shift 3之后,前面的3个参数a、b 、c会被销毁,就剩下了2个参数:d、e,这时对就的位置变量为:$1=d、$2=e, 其中d由$4$1,e由$5$2范例2:做一个加法计算器参数如右:11 17 23 84,对应的位置变量: $1 $2 $3 $4rootxuegod67 # cat 3.sh#!/bin/bash#首先确定有参数if $# -le 0 ;then echo 没有足够的参数存在 exit 124fisum=0while $# -gt 0 ;do sum=expr $sum + $1 shiftdoneecho $sumrootxuegod67 # sh 3.sh 1
5、1 17 23 84135第2章 shell函数使用方法函数:把一个功能封装起来。使用时直接调用函数名。 这样的脚本好处:模块化,代码可读性强。扩展性方便 语法如下:函数名 () 命令序列或:function 函数名() # function 可以不写命令序列注:函数调用时:不带()调用语法函数名 参数1 参数2 函数中的变量均为全局变量,没有局部变量函数的调用可以传递参数。在函数中用$1、$2来引用传递的参数范例4:定义一个函数,变量调用/mnt| cat fun-1.sh #!/bin/bashabc=123#define funexample()abc=456echo $abc#fune
6、xampleecho $abc/mnt| sh fun-1.sh 123456范例5:函数的参数传递/mnt| cat fun-2.sh #!/bin/bashdelete()rm -rf $1mkdir $2delete /mnt/mysql0.txt /mnt/xuegod-1705范例6:通过脚本调用其他模块中的函数我们调用函数是通过source这个命令来调用其他脚本中的函数那么我们现在对前面的作业再进行一下扩展,通过模块化来简化操作首先定义一个包含不同函数的功能模块/mnt| cat fun-moduels.sh #!/bin/bashdelete()rm -rf $decopy()c
7、p -rf $sdir $tdirbackup()tar zcf $tar_name $tar_dir & /dev/nullquit()exitdiskinfo()df -h写一个备份脚本,调用需要的模块/mnt| cat fun-3.shsource /mnt/fun-moduels.shwhile truedoclearcat$BAKDIR/$MYSQLDB.sqlcd $BAKDIR ; tar -czf $MYSQLDB.tar.gz *.sql#查找备份目录下以.sql结尾的文件并删除#find . -type f -name *.sql |xargs rm -rf #或find
8、. -type f -name *.sql -exec rm -rf ;#如何数据库备份成功,则打印成功,并删除备份目录30天以前的目录 $? -eq 0 & echo This $DATE Mysql_db BACKUP is SUCCESScd /data/backup/mysql_db/ ; find . -type d -mtime +30 | xargs rm -rfecho The mysql_db backup successfully 第4章 写脚本的一些注意的地方1、 建议大家把一些长命令分解成小的代码块,代码越短,越方便我们理解2、 将多个语句的开头和结尾排好顺序,原因是方
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 22 跳出 循环 shift 函数 使用 数据库 自动 备份 脚本 v1
限制150内