免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1546 | 回复: 4
打印 上一主题 下一主题

实用shell程序,敬请批评指正! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-19 18:36 |只看该作者 |倒序浏览

  1. # # # # #
  2. #!/bin/sh

  3. #  说明:
  4. #        文件名为rgrep,因为程序内部是递归调用;该程序实际上是grep功能的扩展,grep只能查找#        当前目录下的文件,而rgrep用来遍历所有的子目录,对每个子目录中符合条件的文件调用
  5. #        grep查找匹配字符串。主要用在多目录程序中定位字符串。

  6. files=`ls *.c *.h  2>/dev/null`

  7. if [ "x$files" != x ];  then
  8.         for f in $files
  9.         do
  10.         grep -n -i  "$1" $f 2>/dev/null
  11.         case $? in
  12.         0)
  13.                 echo "`pwd`/$f";;
  14.         esac
  15.         done
  16. fi

  17. list=`ls`
  18. for file in $list
  19. do
  20.         if [ -d "$file" ];  then               
  21.                 cd $file
  22.                 rgrep "$1"
  23.                 cd ..
  24.         fi
  25. done

  26. #EOF


  27. # # # # #
  28. #!/bin/sh

  29. #         说明:
  30. #        主要用在并行程序调试中,当调试并行程序时,如果程序down掉,往往有许多进程没有退
  31. #        出,而这些进程的名称是相同的,所以,根据名称找到其pid,然后发送kill信号,就可以一次#        杀死一批进程。而不是分别输入每个进程的pid。


  32. if [ $# -ne '1' ]; then
  33.         echo "Please specify process character!!"
  34.         exit
  35. fi

  36. USER=`whoami`
  37. if [ "$1" = "all" ];then

  38.         #杀死除该进程之外的所有进程
  39.         for pid in `ps -U $(USER)|grep -v $0|awk '{print $1}'`
  40.         do
  41.                 if [ "$pid" != "PID" ];then
  42.                         echo $pid
  43.                         kill -9 $pid
  44.                 fi
  45.         done

  46. else
  47.         #杀死指定名称或进程名包含指定字符串的所有进程
  48.         for pid in `ps -U $(USER)|grep -i $1|awk '{print $1}'`
  49.         do
  50.                 if [ "$pid" != "PID" ];then
  51.                         echo $pid
  52.                         kill -9 $pid
  53.                 fi
  54.         done
  55. fi

  56. exit

  57. #EOF

  58. # # # # #
  59. #!/bin/sh

  60. #        ColorEcho
  61. #      Display string with the color and style
  62. #        说明:
  63. #        根据style的值和color的值确定字体的显示方式和颜色,
  64. #        然后将字符串以指定的方式输出。

  65. BLACK=1
  66. RED=2
  67. GREEN=3
  68. YELLOW=4
  69. BLUE=5
  70. MAGENTA=6
  71. CYAN=7
  72. BLACK_BG=8
  73. RED_BG=9
  74. GREEN_BG=10
  75. YELLOW_BG=11
  76. BLUE_BG=12
  77. MAGENTA_BG=13
  78. CYAN_BG=14

  79. BOLD=1
  80. FAINT=2
  81. NORMAL=3
  82. UNDERLINE=4

  83. COLOR=
  84. STYLE=
  85. ECHOSTR=

  86. EchoString()
  87. {
  88.         case $COLOR in
  89.                 $BLACK)
  90.                         echo "\033[30;$STYLE\0155$ECHOSTR\033[0m";;
  91.                 $RED)
  92.                         echo "\033[31;$STYLE\0155$ECHOSTR\033[0m";;
  93.                 $GREEN)
  94.                         echo "\033[32;$STYLE\0155$ECHOSTR\033[0m";;
  95.                 $YELLOW)
  96.                         echo "\033[33;$STYLE\0155$ECHOSTR\033[0m";;
  97.                 $BLUE)
  98.                         echo "\033[34;$STYLE\0155$ECHOSTR\033[0m";;
  99.                 $MAGENTA)
  100.                         echo "\033[35;$STYLE\0155$ECHOSTR\033[0m";;
  101.                 $CYAN)
  102.                         echo "\033[36;$STYLE\0155$ECHOSTR\033[0m";;
  103.                 $BLACK_BG)
  104.                         echo "\033[40;$STYLE\0155$ECHOSTR\033[0m";;
  105.                 $RED_BG)
  106.                         echo "\033[41;$STYLE\0155$ECHOSTR\033[0m";;
  107.                 $GREEN_BG)
  108.                         echo "\033[42;$STYLE\0155$ECHOSTR\033[0m";;
  109.                 $YELLOW_BG)
  110.                         echo "\033[43;$STYLE\0155$ECHOSTR\033[0m";;
  111.                 $BLUE_BG)
  112.                         echo "\033[44;$STYLE\0155$ECHOSTR\033[0m";;
  113.                 $MAGENTA_BG)
  114.                         echo "\033[45;$STYLE\0155$ECHOSTR\033[0m";;
  115.                 $CYAN_BG)
  116.                         echo "\033[46;$STYLE\0155$ECHOSTR\033[0m";;
  117.                 *)
  118.                         echo "$ECHOSTR";;
  119.         esac
  120. }

  121. #EOF

复制代码

论坛徽章:
0
2 [报告]
发表于 2004-04-19 20:44 |只看该作者

实用shell程序,敬请批评指正!

是遍历一个目录查找某个字符串吗?
这样子:

  1. find 目录 -name "文件名" -exec grep "字符串" {} \; -print
复制代码

楼主的帖子我在sco上用了一下,报错:
c.sh[27]: rgrep:  not found
c.sh[27]: rgrep:  not found
c.sh[27]: rgrep:  not found
c.sh[27]: rgrep:  not found
c.sh[45]: whoami:  not found
c.sh[46]: USER:  not found
ps: ERROR: Option requires an argument -- U
Usage: ps [-aAdefl] [-G groups] [-o format] [-p pids] [-t termlist] \
        [-u users] [-U users] [-g pgrplist]

c.sh是我给这个shell起的名字。
在前面倒是可以找到我要的字符串,不过没有区分大小写。我只是运行了一下,没有细看你的shell。

论坛徽章:
0
3 [报告]
发表于 2004-04-19 21:18 |只看该作者

实用shell程序,敬请批评指正!

我重新作了一下说明,可以在看一下!

论坛徽章:
0
4 [报告]
发表于 2004-04-19 21:26 |只看该作者

实用shell程序,敬请批评指正!

find 目录 -name "文件名" -exec grep "字符串" {} \; -print
好像只能查找单个的文件,不能处理一批文件,比如*.c文件,如果要在当前目录及其子目录的所有.c文件中查找包含字符串“AAA”的文件,这条语句是不成功的。

论坛徽章:
0
5 [报告]
发表于 2004-04-20 10:18 |只看该作者

实用shell程序,敬请批评指正!

cgvg 是一个挺好的软件,大家可以用一用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP