文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Shell 编程实例集锦

Shell 编程实例集锦

时间:2007-10-15  来源:zixin

Shell 编程实例集锦

OKLinux www.oklinux.cn 2006-07-17 来源:oklinux收集整理 会员收藏 游客收藏
Good news:本站会员功能开放,立即拥有自己的linux专业技术空间---立即注册!
Translate to English(把当前页翻译成英文)
本文摘要:如何远程杀死僵进程? 所谓“僵进程”是指处于睡眠中,而且没用的进程。在进行并行计算时经常会有僵进程产生。由于用 top 看不到“僵进程”,所以写了如下一个叫做“rkill”的 shell 文件: #!/bin/tcshecho Input start number of node: set N1=$echo Input end number

<IFRAME name=google_ads_frame marginWidth=0 marginHeight=0 src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4226839246670100&amp;dt=1192367775625&amp;lmt=1191997089&amp;format=300x250_as&amp;output=html&amp;correlator=1192367775609&amp;channel=7451305146&amp;url=http%3A%2F%2Fwww.oklinux.cn%2Fhtml%2Fdeveloper%2Fshell%2F20070325%2F11661.html&amp;ad_type=text_image&amp;ref=http%3A%2F%2Fwww.oklinux.cn%2Fhtml%2Fdeveloper%2Fshell%2F20070325%2F11662.html&amp;cc=10&amp;ga_vid=1898547051.1192367776&amp;ga_sid=1192367776&amp;ga_hid=2139502492&amp;flash=9&amp;u_h=768&amp;u_w=1024&amp;u_ah=742&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_java=true" frameBorder=0 width=300 scrolling=no height=250 allowTransparency></IFRAME> <IFRAME name=google_ads_frame marginWidth=0 marginHeight=0 src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4226839246670100&amp;dt=1192367775906&amp;lmt=1191997089&amp;prev_fmts=300x250_as&amp;format=300x250_as&amp;output=html&amp;correlator=1192367775609&amp;channel=7451305146&amp;pv_ch=7451305146%2B&amp;url=http%3A%2F%2Fwww.oklinux.cn%2Fhtml%2Fdeveloper%2Fshell%2F20070325%2F11661.html&amp;ad_type=text_image&amp;ref=http%3A%2F%2Fwww.oklinux.cn%2Fhtml%2Fdeveloper%2Fshell%2F20070325%2F11662.html&amp;cc=9&amp;ga_vid=1898547051.1192367776&amp;ga_sid=1192367776&amp;ga_hid=2139502492&amp;flash=9&amp;u_h=768&amp;u_w=1024&amp;u_ah=742&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_java=true" frameBorder=0 width=300 scrolling=no height=250 allowTransparency></IFRAME>

如何远程杀死僵进程?

所谓“僵进程”是指处于睡眠中,而且没用的进程。在进行并行计算时经常会有僵进程产生。由于用 top 看不到“僵进程”,所以写了如下一个叫做“rkill”的 shell 文件:

#!/bin/tcsh echo " Input start number of node: " set N1="$<" echo " Input end number of node: " set N2="$<" echo " Input the NAME of program" set pname="$<" echo "**********************************************************" while($N1 <= $N2) set h='t'$N1 set ppid=`rsh $h ps -ef | grep $pname | awk '{print $2}' ` echo "rsh $h kill $ppid" rsh $h kill $ppid @ N1++ end echo "**********************************************************" 

如何将一个 index 文件中的空链接删除?

在目录 /doc/Art_and_Photos/photo/NASA-Astronomy_Picture_of_the_Day 中只有有限的几个文件,而 archivepix.html 文件中却链接了两千多个文件,我们的目标就是要把不存在的文件链接删除掉。

#!/bin/tcsh -f # 从当前目录中查找有哪些可用文件。find 不支持正则表达式 \{\} set tmp=`find . -type f -maxdepth 1 
-name "ap[0-9][0-9][0-9][0-9][0-9][0-9].html" ` # 将查找结果 ./ap000303.html 转换为 ap000303.html set ff1=`echo $tmp | sed -e 's/\.\/\(ap[0-9]\{6\}\.html\)/\1/g' ` # 在文件 archivepix.html 中查找包含类似 ap000303.html 的行,
并将其导入临时文件 ftmp 中 grep 'ap[0-9]\{6\}\.html' archivepix.html >ftmp # 将 ftmp 中的每一行转换为 ap000303.html 的形式,这样 ff1 和 ff2
中的字符串在形式上就是相同的了。 set ff2 = ` sed -e 's/.*\(ap[0-9]\{6\}\.html\).*/\1/g' ftmp` rm ftmp -f # 比较变量 ff1 和 ff2 的内容,如果一个字符串只存在于 ff2 中,
那么就把文件 archivepix.html 中含有 # 该字符串的行删除掉。 foreach f2 ($ff2) echo $f2 set flag=0 foreach f1 ($ff1) if ($f2 == $f1) then set flag=1 endif end if($flag == 0) then sed -e '/'$f2'/d' archivepix.html >ftmp # 此句最关键之处在于'$f2'
可用于正则表达式。 mv ftmp archivepix.html -f endif end

如何将一个目录中的所有文件链接到网页中?

只要将下列程序的输出导到一个文件中,再将其拷至网页的相应位置就可以了。这里最关键的是看双引号如何输出(\")。

#!/bin/tcsh -f set dd = "/doc/Art_and_Photos/Flash/flash/AGui" set ffff = `find $dd -type f ` set n=0 foreach f ($ffff) @ n++ echo $f echo '< a href='\"$f\"'<'$n',</a>'>> AGui.html end 

如何为一堆文件换名字?

在吴老师的笔记心得中介绍了张林波的高招,但那是 bash 的,而且是以命令行形式给出的。为了便于理解,我将其改写为 tcsh 格式,并将其置于脚本文件之中,更利于使用。

#!/bin/tcsh -f # -f 说明直接运行该文件,而不会先运行 .cshrc 进行初始化 rm tmp_file -f # 确保该文件不存在 foreach fold (*.jpg.*) set fnew = ` echo $fold | sed -e "s/\.jpg\.\(.*\)/-\1.jpg/g" `
# 精华之处 echo "mv $fold $fnew -f " >>tmp_file end chmod a+x tmp_file ./tmp_file rm tmp_file -f

在这个脚本文件中,关键是“精华之处”。它的意义是:首先将要修改的文件名($fold)通过管道( | ) 传给流编辑器(sed),流编辑器对文件名进行处理,其各项的具体意义为:

set fnew = ` echo $fold | sed -e "s/\.jpg\.\(.*\)/-\1.jpg/g" ` sed -e 命令+选项 表示允许多点编辑 s/re/string/ 用 string 替换正则表达式 re /\.jpg\.\(.*\)/ 
“\.”表示一个真正的点,“\.jpg\.” 代表文件名中的“ .jpg.”;
“\(.*\)” 中的‘.’匹配一个非换行符的字符,‘*’匹配 0 个或多个“先前”字符, 它与 shell 的通配符完全不同,shell 的通配符代表 0 个或多个“任意”字符。 “.*”所代表的内容被设为“标签 1”,可在需要的地方用“\1”引用。值得注意 的是:“.*”决不能用“*”来代替,因为“*”将表示任意个“\.”。 /-\1.jpg/ “\1”代表“标签 1”的内容 g 表示行内全面替换

这里还有一个地方需要提醒,那就是将 `echo ...` 引起来的不是单引号,而是键盘左上角标有 “~ ` ”上的撇号.

如何解决网页中字体放大时出现重叠的问题?

方案一:适用于单层目录

#!/bin/tcsh -f set dir=`ls .` foreach d ($dir) if( -d $d) then # 判断是否为目录 cd $d echo "cd $d" foreach f (*.htm *.html) sed -e '/[0-9]pt/d' $f > ftmp # 删除所有包含 9pt、12pt 等关键词的行 mv ftmp $f -f end cd .. endif end 

方案二:适用于多层目录

#!/bin/tcsh -f set SearchPath = "/doc/Reading/everything/武侠/梁羽生" set files=`find $SearchPath -type f -name "*.htm*" ` foreach f ($files) echo $f sed -e '/[0-9]pt/d' $f > ftmp mv ftmp $f -f end 

如何将一个目录中所有文件名由大写变为小写

我们以目录 tmp 为例

1. 进入 tmp 目录的上一级目录 2. zip -r tmp.zip tmp/* 3. mv tmp tmp-old (这是为了安全起见,此处也可改为 rm -r -f tmp ) 4. unzip -LL tmp.zip 

这样,tmp 目录中的文件名就全改为小写了。在确认无误后,可将 tmp-old 目录删除。

如何将一个文件中的内容由大写变为小写

最简单的做法是在 ~/.cshrc 中设如下命令:

alias tr 'tr A-Z a-z< \!* >ttttmp; mv ttttmp \!* -f' 

此处别名必须为 tr,其他的就不行,不知为什么。当需要对文件进行操作时,敲如下命令:

tr [filename] 

该命令在命令行中运行没有任何问题,但是如果将其放在一个 shell script 文件中,然后将该文件的属性改为可执行并执行之的话,你会发现用 alias 设置的简化命令全部失效。解决办法为:

source shell_file 

此处还顺便说一句,sh 命令运行的是 bash 文件。

如何使系统每隔大约3小时自动激活一次声卡

1. 由于我们所用的声卡驱动程序是一个试用版的,在一星期以内,它有3小时的有效时间(尚可接受)。但超过一个星期以后,有效时间就只有20分钟了,那是绝对无法忍受的!吴首教为此感到义愤填膺,于2003年9月1日“坐台”完毕后,组建攻关小组并亲自挂帅,带领组员王某人经过“极其艰苦” 的奋斗,终于攻克了这一难题。短命的攻关小组在完成了其历史使命,并开完“非典声卡激活经验总结表彰大会”后,就地解散。茫茫天地间只留下了如下解决方案:

(1) 建立 shell 脚本文件 opensound

#!/bin/tcsh -f while(1) set datesave=`date +%m%d%H%M%Y` date 082500002003 /usr/lib/oss/soundoff /usr/lib/oss/soundon date $datesave sleep 10800 end 

(2) 将 opensound 的属性改为所有人均可执行, 命令为:

chmod a+x opensound 

(3) 将 opensound 拷贝至 /usr/local/bin

(4) 在 /etc/rc.d/rc.local 中加入

/usr/local/bin/opensound >&/dev/null& 

(5) 重新启动计算机。然后我们就能永远听到美妙的声音啦!!! (此事又一次证明: 道高一尺, 魔高一丈!)

2. 曾经我以为这一问题已圆满解决,但在使用过程中却问题多多,人生最痛苦的事莫过如此。究其原因,都是 soundoff 惹得祸。为了声音永驻,我将不惜 CPU 时间与其试比高。

#!/bin/tcsh -f set datesave=`date +%m%d%H%M%Y` date 082500002003 /usr/lib/oss/soundoff /usr/lib/oss/soundon date $datesave sleep 8000 # 以上是为了在系统启动时激活声卡 while(1) /usr/lib/oss/soundoff >& out set flag=`cat out` rm out -f set N=0 if("$flag" != "") then # flag 不是空串说明 soundoff 执行失败 while(2) @ N++ /usr/lib/oss/soundoff >& out set flag=`cat out` rm out -f if("$flag" == "") then echo "soundoff succeed" break else echo "$N soundoff failed" sleep 5 endif end endif set datesave=`date +%m%d%H%M%Y` date 082500002003 /usr/lib/oss/soundon date $datesave sleep 8000 end 
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载