免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2188 | 回复: 1

[文本处理] 求助,关于linux shell脚本使用getopts的问题 [复制链接]

论坛徽章:
0
发表于 2014-03-28 15:54 |显示全部楼层
本帖最后由 rdcwayx 于 2014-03-28 16:22 编辑

脚本的一个功能是:当前用户下运行了n个test进程,通过-k[pid]杀掉指定进程ID为pid的test进程,如果pid为0,则杀掉所有test进程。
  1. #!/bin/sh
  2. #kill_test.sh

  3. stop()
  4. {
  5.         pid=$1
  6.         name="$PWD/$2"
  7.         user=`whoami`

  8.         echo "pid is $pid"
  9.         echo "name is $name"
  10.         echo "user is $user"

  11.         if [ $pid -eq 0 ]
  12.         then
  13.                 echo "All the process named by $name will be killed!"
  14.                 ps -ef |grep $name|grep -v grep|grep $user|awk '{print $2}'|xargs kill
  15.         fi

  16.         if [ $pid -gt 0 ]
  17.         then
  18.                 kill_name=`ps -ef | grep $pid | grep $user | grep -v grep | awk '{print $8}'`
  19.                 echo "kill_name is $kill_name"

  20.                 if [ "$kill_name" = "$name" ]
  21.                 then
  22.                 #       kill $pid
  23.                         echo "kill $pid"
  24.                 else
  25.                         echo "wrong pid"
  26.                 fi
  27.         fi
  28. }

  29. PROCESS_NAME=“test”

  30. while getopts k:b: OPTION
  31. do
  32.         case $OPTION in
  33.         k)
  34.         KILL_PID=$OPTARG
  35.         stop $KILL_PID $PROCESS_NAME
  36.         ;;
  37.         b)
  38.         ...
  39.         ;;
  40.         ?)
  41.         ...
  42.         esac
  43. done
复制代码
在命令行中运行该脚本:$./kill_test.sh -k26187
  1. pid is 26187
  2. name is /home/zj/bin/test
  3. user is zj
  4. kill_name is /bin/sh
  5. /bin/sh
  6. name is /home/zj/bin/test
  7. wrong pid
复制代码
结果把脚本中第一行的/bin/sh给打印出来了,导致杀test进程失败。
如果把第一行改成#!/bin/bash,再执行脚本就会打印/bin/bash.
如果去掉第一行的#!/bin/sh,脚本执行正常。
而不采用getopts,也保留第一行的#!/bin/sh,直接用$1 $2获取选项参数,脚本执行也正常。
哪位大侠帮忙解释一下?Linux  zj 2.6.18-128.el5,CentOS release 5.3 (Final)

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
发表于 2014-03-28 16:31 |显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP