寻觅生命中的那一片浅草......

comp.unix.shell FAQ 阅读笔记

最近在阅读一个比较经典的关于shell的faq,全文链接在这里http://home.comcast.net/~j.p.h/

作者将comp.unix.shell新闻组上的常见问题总结了一下,做成faq的形式,对学习很有帮助。

不打算全文翻译了,仅把认为比较重要的部分总结一下,做个备案吧

1.UUOC(useless use of cat)

避免 cat file | tr -d ‘xyz’ ,因为这样实际上跑了两个进程cat 和 tr

应该采用输入重定向 tr -d ‘xyz’ <file

2.shebang

脚本第一行是告诉操作系统解释器路径的,如果用解释器显式调用脚本文件,

那么第一行只是注释而已,可有可无。

3.echo 在不同的shell里的解释方式可能不同,要熟悉你的shell是如何做的。

优先采用cat输出变量

cat<<EOF

$a

EOF

4.随机数生成方法

最portable的方法是利用awk内置的srand和rand函数

awk ‘BEGIN {srand();print rand()}’

5.dos和unix文本文件之间转换

dos格式的文本文件,行末尾是
(CR LF)

unix格式的文本文件,行末尾是

所以dos格式文本在unix下显式的时候,尾部会多一个^M

二者转换方式是

dos—unix : sed ’s/^M$//’ dos.txt > unix.txt或者tr -d ‘
‘ <dosfile >unixfile

unix—dos: sed ’s/$/^M/’ unix.txt >dos.txt

另外,也可以用dos2unix unix2dos等现成工具

6.改变term窗口的标题

两种方法

$ echo -en “33]2;XXX07″

$ printf ‘%b’ ‘e]2;XXXa’

7.如何设定用户输入超时

bash里面可以用read的参数-t 设置超时

也可以利用终端属性完成

{

s=$(stty -g)

stty -icanon min 0 time 100

var=$(head -n 1)

stty “$s”

}

8. bash脚本一定要注意空格的使用

$ [ -f xxx ] isn’t the same as

$ [-f xxx ]

9.如何从路径中分离目录和文件

pathname=’/path/to/some/file’

dir=`dirname “$pathname”`

file=`basename “$pathname”`

缺点是,fork出了新进程

可以使用shell内置的字符串处理机制

pathname=/path/to/some/file

file=${pathname##*/}

case $pathname in

*/*) dir=${pathname%/*};;

*) dir=”

esac

10.如何删除特殊字符开头的文件

例如删除 -foo,有三种方法

rm -foo

rm — -foo

rm -i — * (进入交互模式,提示动作)

转载自:http://www.oolec.com/compunixshell-faq-study-note/

尚无评论

发表评论

2024年四月
« 5月    
1234567
891011121314
15161718192021
22232425262728
2930