您的位置:首页 > 运维架构 > Shell

shell脚本学习总结

2013-08-20 17:21 295 查看
看完了书《shell脚本学习指南》,顺便总结一下:

看了整本书,全部都是命令,但也确实很难记得命令的选项,所以学习方法就变了。

学习嘛,要考虑到遗忘的可能,既然会忘,还不如不去记,能做的就是但用到的时候再去学,那么现在学习的目的就是为了缩短以后用到时再去学习的学习时间,所以现在所应该学的,是将书本上的命令记住,选项则查手册页(man),也需要记住一些常用的选项,现在要做的就是熟悉手册页,懂得标准化,命令是在不断升级的,手册页才是包含了最全部的命令的参考,没人会规定你在linux系统行输入命令行时,不准查看手册页,不过看英文确实是件痛苦的事。第二,就是猜测,比如在使用过程中,碰到一个应用,好像没学过,这是要猜测其最可能会作为哪条命令的选项出现的,然后去查对应的手册,学完shell脚本这本书,最多也就熟悉这些命令的大概50%的选项,其他不熟悉的选项肯定要猜测和查手册的。

每个人的记忆力有所不同,最少应该记住每个命令是做什么的,最大是记住命令的每个选项。

学完shell脚本要将shell脚本当做一个程序来看到,而不仅仅只是一个脚本,作为程序是可以被进程内exec函数族调用执行的,这样脚本和C语言就互通了,可以相互调用。

shell脚本作为程序,要有完备的选项处理机制(case,getopts),信号处理机制(trap),输入和输出接口(read,printf),shell的执行环境(环境变量处理),shell的安全性考虑。

进行全局性的考虑之后,才能进入具体的内部设计。

shell内部最难理解的,也最容易让人犯错的,应该是引用,双引号引用,单引号引用,不带引号的引用,搞清楚shell的内部执行机理还是非常重要的



理解清楚此图,就算理解shell的运行机理了,双引号内部只做变量替换、命令替换、算术表达式替换,单引号内部则什么也不做,不带引号的还要进行token分割,波浪号展开,通配符展开,看到这个图就应该能明白awk的程序部分为什么加单引号了,sed的命令部分为什么加单引号了,为什么有些命令要加eval重新执行一遍了。

另外,碰到不懂shell内部执行情况的,可以使用trace类(strace)的命令跟踪一下系统调用:strace -f sh 这样启动一个shell,在此shell内执行你不理解的命令,并跟踪子进程的所有系统调用的执行情况,这个碰到问题时的一个解决办法。

sort,sed,awk,find,正则,这几个是必须要熟练使用的,尤其是awk中的关联数组,就是散列表,C++中的关联对象,处理字符串是极其方便的。

最后,我不得不说,shell的启动,会调用两个脚本文件:

test -r /etc/profile && . /etc/profile

test -r $HOME/.profile && . $HOME/.profile

我在工作中就碰到过需要定制不同的shell启动情况的,可以修改$HOME/.profile
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: