脚本常用套详解.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
脚本常用套路详解(以下总结仅供参考) 关于bash编程, 每个人都有自己的一套, 但目的都是一样的: 正确、安全、高效、低耗、工整的完成任务, 同时,有更好的扩展性、调式性 所以,总结一些乱七八糟的, 仅供真正喜欢bash的人参考之用, 以下总结如有雷同,无尚荣兴 2007-02-12 by wwy Index 脚本编写的结构 定义变量(包含eval命令用法) 循环遍历 逻辑结构 信息的传递 配置文件的处理 为了安全 8、编程风格 9、浅谈IO 10、vim杂项 11、bash部分内建命令总结 12、其他杂项 1、脚本编写的结构 Bash是一个纯面向过程的编程语言,而又区别与某些其他语言, 区别就是,是从上到下顺序执行的,是一种脚本语言 所以,基本的结构就是: 变量定义 --- 函数定义 --- 循环、逻辑判断 结构看起来比较简单,但是严格遵守却比较难, 会因为脚本比较简单、改来改去等,忽略了这个简单的基本规则 不是用这样结构的隐患在于: 外部变量与函数变量冲突 脚本修改容易出错 变量的遗漏等等 然而,这不是绝对的,打破这个规则的理由: 1、有明显的逻辑判断,而剩去大量的,没意义的函数、变量定义 2、可以避免变量冲突 3、脚本太简单 4、有自己编程风格等等 2、定义变量 eval的应用,可以实现变量的自动化定义, 先看这个例子: [root@fxstest1 ~]# echo pwd pwd # “pwd”是随便的一个字符串,打到stdout上 [root@fxstest1 ~]# eval `echo pwd` # 注意echo命令两边是反引号 /home/wwy # 此时,pwd不再是字符串,而是一个命令 所以,同理可以自动定义变量, 例如:定义变量$a,$b,$c,$d,$e,$f的值分别为1,2,3,4,5,6 做法: [root@fxstest1 ~]# seq 0 5 | tr [0-9] [a-z] | awk {i++;print $1=i} # 以下是这个命令的输出结果 a=1 b=2 c=3 d=4 e=5 f=6 [root@fxstest1 ~]# eval `seq 0 5 | tr [0-9] [a-z] | awk {i++;print $1=i}` # eval `(反引号)命令`(反引号),这样之后,将以上命令的输出自动执行 [root@fxstest1 ~]# echo $a $b $c $d $e $f 1 2 3 4 5 6 # 此时发现,变量已经被自动附值了 此种做法当然不是为偷懒,或故意让人迷惑, (耍酷的成份有一点,如果你认为这也算“酷”的话) 真正的力量在于,自动的、快速的,生成数据结构, 生成数组的例子: [root@fxstest1 ~]# eval `awk -F: {print $1=($1,$(NF-1),$NF)} /etc/passwd` # 上面这句命令,将passwd文件做成了一个数组, # 数组名是各个用户名,各个数组的内容分别是用户名、数组目录、login shell [root@fxstest1 ~]# echo ${wwy[@]} # 输出wwy这个数组的内容 wwy /home/wwy /bin/bash [root@fxstest1 ~]# echo ${wwy[1]} # 随意的输出wwy这个数组的某个值 /home/wwy (关于具体的数据结构应用,可以参考“汇率检查脚本”那个文档) 引入外部文件,也是定义变量的一个方法,也常用于引入函数 (关于具体的应用,可以参考“批处理检查脚本”那个文档) 3、循环遍历 循环的操作,直接决定了脚本的效率性能,也存在很多的技巧 (以下都是处理一些效率相关的问题,而并非逻辑问题) 1、for循环 在语法上,for循环有两种,即 for in循环与for do循环, 两者相比,for in循环偏向于in后面的读取,for do循环则偏向于数据的遍历 所以,一般来说,for in用于读文件等操作,在效率上表现的比较好, 用法: for line in `cat file.txt`;do # 与cat命令连用这种方式 echo $line # 将每一行的结果存入$line变量内,由echo命令处理 done 而for do循环的遍历能力是很强的, 用法1: for ((i=0;i10;i++));do # 根据不同的算法,随意改变 $i的初始值、累加值等 echo $i done # 输出0到9,10个数 用法2: a=(A B C D E F) for ((i=0;i${#a[@]};i++));do echo ${a[$i]} done # 输出a数组的所有内容 (关于具体的数

文档评论(0)

mv2323 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档