我曾经听到这么一个故事: 一个年轻的程序员问一个老程序员(一个比较牛逼的公司的CTO) 年轻程序员: 你为什么这么牛X., 就好像没有你不会的。老程序员: 积累的。年轻程序员: 怎么才能积累到您的程度呢。我每天都在积累。但是似乎都没有感觉到进步。老程序员: 我从20岁开始做到了一件事情,直到今天,而且尽可能地保证不间断。年轻程序员: 到底是什么? 老程序员: 我每天保证自己有2个小时在学习新的东西。

第一个shell 脚本(写于2009/11/4)

上一篇 / 下一篇  2009-11-27 15:47:09

Linux有1个多月了,终于开始动手自己写脚本了,真高兴

      不过开始就遇到了不少问题,现在分享一下这些小小的问题,鼓励自己再接再厉!

      首先是关于date的用法,我写的这个脚本涉及到求当天的前一天和前二天,之前对date的理解还不够全,也不知道所有具体的参数的意义,于是在网上查了 一下,看得最多的是自己写函数来实现,用了很多if语句,大致过程是:首先让day减一天,然后开始判断这一天是否等于0,如果等于0,就就需要判断上一 个月是30天还是31天,然后还要判断是否是润年,等等,这个比较麻烦,连续的判断,关键是即使用这样的写法,我要计算当天的前两天,岂不是更是麻烦了, 于是我就寻找更为简单的方法。很快另外一个方法找到了,那就是把所有的时间用秒来表示,date中有这种表示的格式,因为一 天=24*60*60=86400,所以不管是哪天的前一天,只要把当天的时间换算成秒,然后减去86400,然后再把格式转换为读得懂的格式,这样的方 式,我感觉不错,至少没有了繁琐的语句。然后我看在这个算法的评论中,有个人这样写了"date --date=+%Y/%m%d yesterday",这样的效果更好,直接用linux自带的函数实现。看着这些越来越简单的方法,心中有点窃喜,虽然可能多写点代码比较好,但刚入 门,希望一步一步的来做简单入手,先熟悉命令的用法至关重要。后来我又在《鸟哥的linux私房菜》一书中找到了更简单的用法,比如两天前可用“date --date='2 days ago' +%Y%m%d”,以此类推,无论当天的前多少天,都可以找出来了,比较高兴,Linux内置的这些命令实在是强大啊。

     下面是第二个问题,我想把date得出来的结果赋值给一个变量,我当时就这样写date1='date --date='2 days ago' +%Y/%m/%d',后来执行shell脚本的时候,弹出错误“days”这个参数找不到,我就想,莫非哪儿写错了,再检查了一遍,感觉没有错,后来 想,莫非鸟哥的书里面的版本和我用的版本不一样,最后就一步步的执行,并尝试,突然就想到date1='date --date='2 days ago' +%Y/%m/%d'这条语句中,应该是后面的命令先执行,然后再赋值的,那如果要让后面的命令执行,应该用" ` ",而不是简单的单引号,我之前把这点给忽略了,搞了半天,唉~ 还是自己对这些用法掌握得不够深入啊!

   最后还有一个问题,我再表达时间的时候,习惯用+%Y/%m/%d 这种格式,这样的结果感觉方便看,比如今天就表示为:2009/11/4,方便易懂,但就是因为这个用法,让我弄了1个多小时间才成功执行shell脚 本,原因是我用了touch命令,用touch命令根据日期来创建新的文件。我执行shell脚本的时候老是弹出这样的结果:cannot touch 2009/11/4: cannot find file or diretory,大致是这个错误,我可谓找了无数的方法啊,起初认为touch的用法是否正确,检查完后,发现没有错,换一个脚本写touch 111,是可以执行成功的,后来就想是否是权限的问题,最后选择用root用户来执行,并把脚本的权限改为777,还是不行,我在网上查了,好像也没有多 少资料关于我这个问题的,后来百思不得其解时,我再回去原点,去看错误提示,一直在想为什么就是找不到文件或目录呢?莫非在这个需要什么已经创建好的文件 和目录,不需要啊,突然我就看到了在日期中间的 / 这个符号,顿时恍然大悟,终于明白了,这个符号是linux内置的符号,表示一层一层目录的,如果用这个符号,就是去某个目录下创建文件,但系统找不到这 样的 目录,所以报这个错误了,终于解开了,执行成功了,高兴之余也多了一点反思。

   总结:至少有一点点的进步了,但依然缺乏linux下命令的使用灵活性,缺乏一些系统的敏感性,如果对那些命令的使用足够精准,并且使用的命令足够熟悉,也不会这样,反思一下,继续努力!


TAG:

 

评分:0

我来说两句

Open Toolbar