LinuxSir.cn,穿越时空的Linuxsir!

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

参数传递求助

[复制链接]
发表于 2011-5-4 09:46:52 | 显示全部楼层 |阅读模式
自己做了一个关键字搜索脚本,但是很不好用,主要是传参的时候有问题

  1. #!/bin/bash
  2. xsearch()
  3. {
  4.         len=${#1}
  5.         if [ $len -eq 1 ]
  6.         then
  7.         find . -name "*.${1}" -print0 | xargs -0 grep -n "${2}"
  8.         else
  9.         find . -name "${1}" -print0 | xargs -0 grep -n "${2}"
  10.         fi
  11. }

  12. if [ $# -eq 1 ] # only one arg,just search
  13. then
  14.         find . -name "*.${1}"
  15.         exit 0
  16. elif [ $# -eq 2 ] # has two args: suffix,keyword
  17. then
  18.         xsearch ${1} ${2}
  19. elif [ $# -eq 3 ] # three args,respectively : path, suffix,keyword
  20. then
  21.         len=${#2}
  22.         if [ $len -eq 1 ]
  23.         then
  24.         find ${1} -name "*.${2}" -print0 | xargs -0 grep -n "${3}"
  25.         else
  26.         find ${1} -name "${2}" -print0 | xargs -0 grep -n "${3}"
  27.         fi
  28. fi
复制代码

主要就是这个,
  1. find . -name "*.${1}" -print0 | xargs -0 grep -n "${2}"
复制代码

我无论使用
  1. scriptname c "some keywords"
复制代码

还是
  1. scriptname c 'some keywords'
复制代码
均不正确,请指教啊
 楼主| 发表于 2011-5-4 09:49:02 | 显示全部楼层
但是我直接
  1. find . -name "*.c" -print0 | xargs -0 grep -n " + 1"
复制代码

或者
  1. find . -name "*.c" -print0 | xargs -0 grep -n ' + 1'
复制代码
都是正确的......
回复 支持 反对

使用道具 举报

发表于 2011-5-4 14:12:24 | 显示全部楼层
什么现象 ?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-4 15:57:51 | 显示全部楼层
Post by aswjh;2137586
什么现象 ?

  1. find . -name "*.c" -print0 | xargs -0 grep -n '+ 1'
复制代码

./player.c:240:    memcpy(vct->data + 10, &rmr, sizeof(uint16_t));
./threads.c:624:    play = t_ar + 1;
./receiver.c:186:        con.ort = oprt + 1;

  1. script c '+ 1'
复制代码
-----下面就是一些垃圾信息,本不该搜出来的--------
./encoder.c:254:    for (j = 0; j != frkt; j++ ) {
./encoder.c:255:        da = pacta + (j * 4);
./encoder.c:256:        memcpy(dat, fra + j, sizeof(uint32_t));
------- 还有很多垃圾 ----
./player.c:240:    memcpy(vct->data + 10, &rmr, sizeof(uint16_t));
./threads.c:624:    play = t_ar + 1;
./receiver.c:186:        con.ort = oprt + 1;
回复 支持 反对

使用道具 举报

发表于 2011-5-4 16:59:28 | 显示全部楼层
Post by henryhj;2137619
  1. find . -name "*.c" -print0 | xargs -0 grep -n '+ 1'
复制代码



  1. script c '+ 1'
复制代码




" + 1"含空格,shell会解释成+和1两个参数
xsearch ${1} "${2}"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-5 10:51:34 | 显示全部楼层
Post by aswjh;2137656
" + 1"含空格,shell会解释成+和1两个参数
xsearch ${1} "${2}"


谨受教

回想起来,这种错误实在不应该啊
回复 支持 反对

使用道具 举报

发表于 2011-5-6 10:07:12 | 显示全部楼层
头像很滲人。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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