首页 | 程式人生 | 原创下载 | 技术文档 | 留言我们 | 关于我们

Bash学习笔记(三)

作者: phanrider        2006-07-18

如果说Bash内键的一些命令还不足以满足你的要求的话,那么系统中自带的命令工具则一会让你胃口大开了,这些命令很早就存在于UNIX/LINUX系统中了。如:sed,grep,awk,find,sort,甚至于perl都可以很好的与shell结合。其中sed与awk都是复杂的命令,不是三言两语可以说完的,在本笔记中仅仅对特定的任务用不同的方法实现时有所涉及。

例如:怎么得到当前用户的主目录
方法一:


[phanrider@redhat /]$ echo $HOME
/home/phanrider



方法二:


[phanrider@redhat ~]$ awk -F: "{if(\$1==\"`whoami`\") print \$6}" /etc/passwd
/home/phanrider



方法三:


[phanrider@redhat ~]$ cat /etc/passwd | grep `id -un` | awk -F: '{print $6}'
/home/phanrider



方法四:


[phanrider@redhat ~]$ cat /etc/passwd | grep `id -un` | sed 's/:/--/5' | sed 's/.*--//g' | sed 's/:.*//1'
/home/phanrider



方法五:


[phanrider@redhat ~]$ awk -F: "{if(\$3 == `ps u | grep 'grep' | awk -F\" \" '{print $1}'`) print \$6}" /etc/passwd
/home/phanrider



方法六:


[phanrider@redhat ~]$ awk -F: "{if(\$1==\"`touch ./test/tmp001 | find ./test -name tmp001 -exec ls -l {} \; | awk -F\" \" '{print \$3}'`\") print \$6}" /etc/passwd
/home/phanrider



方法七:


[phanrider@redhat ~]$ sed -n "/`ps u | sed -n '/sed/p' | sed 's/ .*//g' | uniq `/p" /etc/passwd | sed 's/:/--/5' | sed 's/.*--//g' | sed 's/:.*//1'
/home/phanrider



从以上可以看出,到达目标的方法不止一种,关键在于你自己怎么去做。但最优秀的方法永远只有一种。

在Bash中,还有许多需要注意的地方,方括号[...]、双方括号[[ ... ]]、圆括号(...)、双圆括号(( ... ))、引用("双引号")、强制引用('单引号')、元字符、正则表达式、参数传递、shell过滤与外部命令的过滤等等。Bash中关于这些命令有帮助文档,一句耳熟人详的话是,“有困难,找男人(man)”--虽然它一直为人所诟病,总之这些晦涩难懂的命令各种变化是令人恐怖的,不过当你一旦掌握并熟练运用它,你会觉得其乐无穷。这就好比Windows给你的是一个千篇一律的玩具,而Linux给你的是一个组成玩具的各种零件。想玩什么样的玩具全由你自己决定。就到这里吧。


→返回←

红蜻蜓工作室版权所有
Copyright © 1999-2025 Reddragonfly & Studio All Rights Reserved.
如有任何问题及建议请留言红蜻蜓工作室