LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 62338|回复: 99

【shell技巧交流区】:[把你的shell技巧贴出来,让我们分享]

[复制链接]
发表于 2003-5-3 18:26:55 | 显示全部楼层 |阅读模式
用自动导入函数的方法,可以在命令行下像执行命令一样快捷,而且速度快,占用资源少.
1,建立自己的函数库
mkdir functionlib
然后将常用的脚本改成函数的语法,如:
function filename { command ; }
将filename拷贝到functionlib中,
2,修改环境文件,在/etc/profile中添加
export FPATH=$HOME/functionlib
3,重登录一下
这样的话,你就可以随时用像ls那样运行你自己的filename"命令"
而不需要用什么dot,sh,来运行你的函数/脚本啦~~
如果在脚本中运行,可以在脚本顶部用
#!/bin/sh
##
autoload filename        //来自动导入函数.
...
filename                //调用函数
...
 楼主| 发表于 2003-5-13 01:42:21 | 显示全部楼层

技巧:pkill的妙用

有的时候有很多进程或运行或睡眠或僵死,占用了很多宝贵的内存空间,kill固然可以杀掉某些进程,但更好的方法是用pkill,举例:
  1. root//root>ps -A
  2.   PID TTY          TIME CMD
  3. ...
  4. 1045 ?        00:00:00 kdeinit
  5. 1052 ?        00:00:00 kdeinit
  6. 1054 pts/0    00:00:00 [color=red]xterm[/color]
  7. 1056 pts/1    00:00:00 bash
  8. 1082 pts/0    00:00:00 ps
  9. root//root>free
  10.              total       used       free     shared    buffers     cached
  11. Mem:        252340     212036      [color=red]40304[/color]          0       5752     103200
  12. -/+ buffers/cache:     103084     149256
  13. Swap:       610460          0     610460
  14. root//root>pkill -9 xterm;free
  15. [1]+  Killed                  xterm
  16.              total       used       free     shared    buffers     cached
  17. Mem:        252340     210776      [color=red]41564[/color]          0       5760     103200
  18. -/+ buffers/cache:     101816     150524
  19. Swap:       610460          0     610460
复制代码
在我杀掉了xterm这个进程后,看看你的free内存空间相应增加不少?.;)
详细使用方法请:
man pkill or pkill --help
发表于 2003-5-13 20:57:14 | 显示全部楼层
我喜欢用killall 和 xkill
发表于 2003-5-14 22:02:35 | 显示全部楼层
kill进程还是要慎重,对于不清楚具体作用的进程还是少k为妙,呵呵。
 楼主| 发表于 2003-5-14 23:35:08 | 显示全部楼层

技巧:使用script命令捕获终端屏幕

script是一个shell的内建命令,他的作用是为终端会话制作一个副本,把用户的输入/输出信息以文件的形式保存下来,详细的说明请看man script
以我的应用作个例子:
javalee//home/javalee>script           //开始捕获屏幕
Script started, file is typescript     //输出文件是typescript ,也可以用script anyfilename,anyfilename就是输出文件.
javalee//home/javalee>su -
Password:
root//root>tcpdump              //要捕获的信息
tcpdump: listening on ppp0
23:21:30.877844 211.150.193.150.32866 > 127.0.0.1.domain:  7918+ A? www.linuxsir.cn. (34) (DF)
23:21:31.014904 127.0.0.1 > 211.150.193.150: icmp: 127.0.0.1 udp port domain unreachable (DF)
....
....
23:22:06.770764 211.150.193.150.32839 > 211.93.98.22.http: P 3494:4374(880) ack 5784 win 17376 <nop,nop,timestamp 1222040 17688229> (DF)
tcpdump: pcap_loop: recvfrom: Network is down
root//root>exit
logout
javalee//home/javalee>
javalee//home/javalee>exit    //用exit结束捕获
Script done, file is typescript   //输出的结果放在typescript中
javalee//home/javalee>cat typescript
...(输出略)
这是我上网是用script命令劫获tcp连接情况来检查网络的一个方法,也许还有别的妙用,慢慢研究吧~~
发表于 2003-5-15 16:53:53 | 显示全部楼层
不错 有意思
 楼主| 发表于 2003-5-15 17:44:15 | 显示全部楼层
一般来所,root的进程还是少kill为妙,或者你的PPID号以后的可以kill,当然是有选择的.
 楼主| 发表于 2003-5-20 21:47:15 | 显示全部楼层

技巧:press any to continue...的实现

read命令常用于接受用户的输入动作.他的一个妙用就是可以在脚本中实现pause的效果,如:
...
echo -n "ress any to continue ..."
read
....
 楼主| 发表于 2003-5-21 11:52:29 | 显示全部楼层
用stty和dd实现暂停,只须按一个键就可.
#!/bin/ksh
#
function char {
settty=$(stty -g)
stty raw
dd if=/dev/tty bs=1 count=1 2> /dev/null
stty -raw
stty $settty
}
print "ress any key to continue..."
input=$(char)
 楼主| 发表于 2003-5-23 01:52:34 | 显示全部楼层

技巧:如何检查用户的输入?

有的时候,我们对用户的输入要作必要的检测,如,限制输入的长度/类型.举例说明:
  1. #!/bin/ksh
  2. #要求用户必须输入四个数字
  3. while true
  4. do
  5. echo -n "请输入四个数字:"
  6. read num
  7. len=${#num}
  8. #变量len存放输入的长度
  9. if [[ $num != [0-9][0-9][0-9][0-9] || $len != 4 ]] then
  10. #进行检测,如果你输入有非数字字符,或者长度不等于四个,便提示错误信息
  11. echo "错误! 重新输入"
  12. continue
  13. else
  14. echo "输入正确,退出!";exit 0
  15. fi
  16. done
复制代码
这是个例子,在我们编写脚本中可以借鉴
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表