- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[计算机]脚本常用套路详解1
脚本常用套路详解(以下总结仅供参考)
关于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)