LinuxSir.Org  
| 网站首页 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
置顶的主题 精华主题  
主题工具
旧 03-05-03, 18:26 第 1 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

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


用自动导入函数的方法,可以在命令行下像执行命令一样快捷,而且速度快,占用资源少.
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 //调用函数
...

此帖于 03-05-03 18:30 被 KornLee 编辑.
  KornLee 当前离线   回复时引用此帖
旧 03-05-13, 01:42 第 2 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

标题: 技巧:pkill的妙用


有的时候有很多进程或运行或睡眠或僵死,占用了很多宝贵的内存空间,kill固然可以杀掉某些进程,但更好的方法是用pkill,举例:
代码:
root//root>ps -A PID TTY TIME CMD ... 1045 ? 00:00:00 kdeinit 1052 ? 00:00:00 kdeinit 1054 pts/0 00:00:00 xterm 1056 pts/1 00:00:00 bash 1082 pts/0 00:00:00 ps root//root>free total used free shared buffers cached Mem: 252340 212036 40304 0 5752 103200 -/+ buffers/cache: 103084 149256 Swap: 610460 0 610460 root//root>pkill -9 xterm;free [1]+ Killed xterm total used free shared buffers cached Mem: 252340 210776 41564 0 5760 103200 -/+ buffers/cache: 101816 150524 Swap: 610460 0 610460
在我杀掉了xterm这个进程后,看看你的free内存空间相应增加不少?.
详细使用方法请:
man pkill or pkill --help

此帖于 03-05-13 01:51 被 KornLee 编辑.
  KornLee 当前离线   回复时引用此帖
旧 03-05-13, 20:57 第 3 帖
ltkun
 
ltkun 的头像
 
 
★☆版★主☆★  
  注册日期: Aug 2002
  我的住址: 上海
  帖子: 4,344
  精华: 4
 

我喜欢用killall 和 xkill







__________________
DELL XPS420 :Q6600+4Gram+8600GT+320G+ 2707……
神舟被我卖了……很舍不得
  ltkun 当前离线   回复时引用此帖
旧 03-05-14, 22:02 第 4 帖
LYOO
 
LYOO 的头像
 
 
注册会员  
  注册日期: Jan 2003
  帖子: 782
  精华: 37
 

kill进程还是要慎重,对于不清楚具体作用的进程还是少k为妙,呵呵。







__________________
http://211.92.88.40/~lyoo/bookmark/bookmark.html
  LYOO 当前离线   回复时引用此帖
旧 03-05-14, 23:35 第 5 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

标题: 技巧:使用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.com. (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连接情况来检查网络的一个方法,也许还有别的妙用,慢慢研究吧~~
  KornLee 当前离线   回复时引用此帖
旧 03-05-15, 16:53 第 6 帖
ltkun
 
ltkun 的头像
 
 
★☆版★主☆★  
  注册日期: Aug 2002
  我的住址: 上海
  帖子: 4,344
  精华: 4
 

不错 有意思
  ltkun 当前离线   回复时引用此帖
旧 03-05-15, 17:44 第 7 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

一般来所,root的进程还是少kill为妙,或者你的PPID号以后的可以kill,当然是有选择的.
  KornLee 当前离线   回复时引用此帖
旧 03-05-20, 21:47 第 8 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

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


read命令常用于接受用户的输入动作.他的一个妙用就是可以在脚本中实现pause的效果,如:
...
echo -n "Press any to continue ..."
read
....

此帖于 03-05-21 12:14 被 KornLee 编辑.
  KornLee 当前离线   回复时引用此帖
旧 03-05-21, 11:52 第 9 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

用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 "Press any key to continue..."
input=$(char)
  KornLee 当前离线   回复时引用此帖
旧 03-05-23, 01:52 第 10 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

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


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

此帖于 03-08-15 22:53 被 KornLee 编辑.
  KornLee 当前离线   回复时引用此帖
旧 03-05-29, 09:50 第 11 帖
plan9
 
plan9 的头像
 
 
注册会员  
  注册日期: Jan 2003
  帖子: 208
  精华: 3
 

如果是bash还有一种更简单的方法:
echo -n "Press any key to continue..."
read -n 1 foo







__________________
Robert is on the way...
  plan9 当前离线   回复时引用此帖
旧 03-05-29, 14:59 第 12 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

都是讨论如何使程序继续的,那么怎么实现按一个键暂停呢?
如:
#!/bin/ksh
#这是我写的一个显示系统随机数的脚本
#的例子
##
代码:
(($#!=1)) && { print "Usage:random number[Enter]";exit 1;} print "\n\n\n" msg="Creating Random Numbers..." n=1 while (($n<=$1)) do print -n "\t\t\t$msg$(print $RANDOM)\r" ((n+=1)) done print "\n" exit 0
当运行的时候,屏幕显示
Creating Random Numbers...20102
他的数字不断变化,那我想用任何一个键使它暂停,再按一个键让它继续,(当然用CTRL+S/CTRL+Q也可以实现,)
请问:如何实现?,
  KornLee 当前离线   回复时引用此帖
旧 03-06-08, 12:35 第 13 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

标题: shell变量传递给sed,awk,grep简单方法


有时候在脚本编写中,需要往诸如awk等工具中传递shell的变量,举个简单的例子,如:
ps -aux|sed -n 1p
read input?"please field number your want to see:"
ps -aux|awk '{print $"'${input}'"}'
read enter?"please line number your want to see:"
ps -aux|sed -n ${enter}p
read user?"please username your want to see:"
ps -aux|grep $user
注:上述文件无实际意义,只为说明而已.
  KornLee 当前离线   回复时引用此帖
旧 03-06-08, 18:46 第 14 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

标题: 开启小键盘数字灯的方法


在man setleds的描述中,有一段设置字符控制台数字灯的脚本:
代码:
INITTY=/dev/tty[1-8] for tty in $INITTY do setleds -D +num < $tty done
把它放在/etc/rc.d/rc.local文件中即可!这样就可以像WIN一样一启动系统,它的小键盘的数字灯总是打开的!
在字符模式下,也可以这样:
setleds -D +num/+caps/+scroll
  KornLee 当前离线   回复时引用此帖
旧 03-06-09, 14:06 第 15 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

标题: 技巧:把输入的密码变成*号的方法


注:此贴转自:WWW.CHINAUNIX.NET
代码:
#!/bin/sh getchar() { stty cbreak -echo dd if=/dev/tty bs=1 count=1 2> /dev/null stty -cbreak echo } printf "Please input your passwd: " while : ; do ret=`getchar` if [ -z $ret ]; then echo break fi str="$str$ret" printf "*" done echo "Your password is: $str"
  KornLee 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 03:37


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2012, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2011, LinuxSir.Org