随笔分类 -  Wicked Cool Shell Scripts

写写关于Linux下的Shell脚本的心得
摘要:所有的合法化输入脚本中,最有挑战的一个非属于操作日期不可。它的目的是确保一个给定的日期在现实中是存在的。如果忽略闰年,这个任务并不难,因为每年的日期都很有一致性。这种情况下,我们所要做的仅仅是将一个给定的日期和每个月的天数进行比较。但是为了计算闰年,就需要增加一些额外的逻辑了。 下面就是一个计算闰年的规则集合:1.不能被4整除的不是闰年2.能被4和400同时整除的是闰年3.能被4整除,但不能被400整除,可又能被100整除的,不是闰年4.除了上述情况,所有能被4整除的都是闰年代码:validdate.sh 1 #!/bin/sh 2 3 # validdate.sh--合法化一个日期,... 阅读全文
posted @ 2012-12-07 10:55 十舍七匹狼 阅读(812) 评论(0) 推荐(0) 编辑
摘要:咋一看,在一个shell脚本中合法化一个浮点值的过程看起来有些挫,但想想看浮点数也不过就是一个用小数点分割开来的2个整数。联系第5个脚本validint.sh,你会发现浮点数合法化的测试短的让人惊讶。代码:validfloat.sh 1 #!/bin/sh 2 3 # validfloat.sh -- 测试一个值是否是合法的浮点数 4 # 注意,这个脚本并不能接受科学记数法形式的数字 5 6 # 为了测试是否合法,我们需要在小数点位置分割数字。 7 # 然后测试第一个部分,看看是不是一个合法的整数 8 # 然后测试第二个,看看是不是>=0的整数。 9 # 所以-30.5合法,-30.-8 阅读全文
posted @ 2012-12-06 10:49 十舍七匹狼 阅读(1003) 评论(0) 推荐(0) 编辑
摘要:类似于你看过的第2个脚本,正确化整型输入看起来非常简单,除非你想要确保负数也能作为输入。问题就在于每一个数值只能有一个负号,且必须出现在数字的头部。本脚本中的纠正程序能保证负数也能被正确的格式化好,更有甚者,本脚本甚至可以把数字固定在用户指定的范围中。代码:validint.sh 1 #!/bin/sh 2 3 # validint.sh --正确化整型输入,包括负的。 4 5 function validint 6 { 7 # 正确化第一个域。 8 # 如果用户提供了$2和$3的话,那么有: $2 <= 第一个域 <= $3 9 10 number="$1"; 阅读全文
posted @ 2012-12-04 16:20 十舍七匹狼 阅读(784) 评论(0) 推荐(0) 编辑
摘要:程序员经常犯的一个错误是:在向用户显示计算的结果时,并没有在第一时间格式化好它们。如果用户没有从右向左手动计数,然后在心里每三个数字就插入一个逗号的话,是很难界定43245435这个数字有没有达到百万的(英文中的数字记法,如果是汉语的话,个人觉得还是4个数字插入一个逗号更好读点,如果汉语需要这样计数的话)。使用下面这个脚本来格式化你的计算结果。nicenumber.sh 1 #!/bin/sh 2 # nicenumber.sh -- 给定一个数字,将它用逗号分隔的形式表示出来 3 # 以DD和TD作为实例。实例化nicenumber.sh,如果指定了第二个参数,会产生一个标准输出。 4 .. 阅读全文
posted @ 2012-12-03 15:19 十舍七匹狼 阅读(1243) 评论(2) 推荐(1) 编辑
摘要:Shell脚本开发过程中的一个不确定的问题就是前后不一致的数据格式的数目。要正常化他们,可能很难也可能比较简单。日期格式就是最有挑战性的一种,因为一个日期可以有多种特定方式的写法。即使你提出了一个特定的格式,比如“月份 几号 年份”,也有可能得到一个不符合条件的输入:月份是用的数字,而不是名称,或是月份的名称用的是一个缩写(英文中比如11月是Nov.),再或是一个全是大写的完整月份名。由于这个原因,一个正常化日期的函数,虽然自身还只是有点初级功能,但是以后会证实在一个更完备的脚本中会是多么的有用处,特别是第7个脚本--正确化日期格式。normdata.sh 1 #!/bin/sh 2 3 .. 阅读全文
posted @ 2012-11-30 15:19 十舍七匹狼 阅读(978) 评论(0) 推荐(0) 编辑
摘要:合法化输入:只允许数字和字母 用户常常会忽略掉说明,并且输入错误的数据。作为一个Shell脚本开发人员,你需要拦截并纠正这些错误。 典型情况是,你或许会遇见文件名或是数据库的键。你提示用户要输入一个全部由大小写字母和数字组成的字符串,没有标点,没有特殊字符,没有空格。他们是否输入正确了?这就是这个脚本要测试的内容。validAlphaNum.sh 1 # validAlphaNum.sh - 确保输入只由数字、字母构成 2 3 #!/bin/sh 4 5 validAlphaNum() 6 { 7 # 合法化参数:都是大写字母+小写字母+数字,返回0;否则,返回1 8 9 ... 阅读全文
posted @ 2012-11-28 16:50 十舍七匹狼 阅读(226) 评论(0) 推荐(0) 编辑
摘要:每个章节中的脚本独立成文。 代码已测试过,Bash版本:GNU bash, version 3.00.15(1)-release (i686-asianux-linux-gnu) 使用环境变量的Shell脚本,有一个隐藏的危险:它们可能部分正确的指向不存在的程序。比如你决定使用环境变量PAGER来灵活的演示脚本输出,而不是通过编写一个特殊的工具,那么如何确定PAGER这个值已经设置正确了呢?毕竟它不是一个有效的程序,你的脚本可能会崩溃。 下面的这个脚本表明了在系统路径中,如何通过测试来确定一个给定的程序能否查找得到。同时,它也很好的演示了一系列不同的脚本技术,包括脚本函数和变量切片(slic. 阅读全文
posted @ 2012-11-27 14:59 十舍七匹狼 阅读(144) 评论(0) 推荐(0) 编辑