发新话题
打印

bshell求助:如何实现这个功能?grep的值为空的if判断

bshell求助:如何实现这个功能?grep的值为空的if判断

  变量  gh_tmp1=`grep $xm_gh ${BKXSGH}`
  gh_tmp=`echo $gh_tmp1| cut -d'|' -f1`
如果gh_tmp不能够得到值,为空

   则原行全部返回
  if [ $gh_tmp=="" ]
    then
      #原封不动将该行回显
      echo $ln >> $DSTF_LSBK
         else
         echo "lanshou|$gh_tmp|$bkdh|$bkfs" >> $DSTF_LSBK
         echo "lanshou|$gh_tmp|$bkdh|$bkfs" >> error.log
   fi

这个if语句判断有问题,求助!

 


我的代码如下:


for ln in `cat xsbk_qj_tmp0109.txt`
do

  xm_gh=`echo $ln|cut -d'|' -f2`
  bkdh=`echo $ln|cut -d'|' -f3`
  bkfs=`echo $ln|cut -d'|' -f4`

  #工号库的姓名字段,cut出工号
  gh_tmp1=`grep $xm_gh ${BKXSGH}`
  gh_tmp=`echo $gh_tmp1| cut -d'|' -f1`
  #  echo $gh_tmp>>error.log
  # echo $gh_tmp>err
  cat err

   if [ $gh_tmp=="" ]
then
#原封不动将该行回显
echo $ln >> $DSTF_LSBK
         else
         echo "lanshou|$gh_tmp|$bkdh|$bkfs" >> $DSTF_LSBK
         echo "lanshou|$gh_tmp|$bkdh|$bkfs" >> error.log
   fi
以上fi语句中,始终不能质询内广then的部分,如何比较呢?

我试图使用追加到文件,但是还是不能成功:

echo "$gh_tmp">err

  if [ -z err ]
    then
#原封不动将该行回显
echo $ln >> $DSTF_LSBK
    else
         echo "lanshou|$gh_tmp|$bkdh|$bkfs" >> $DSTF_LSBK
         echo "lanshou|$gh_tmp|$bkdh|$bkfs" >> error.log
   fi


红色部分不对,文件err在grep为空是,大小也是不为零,怎么办?请大家帮忙看看
grep之后有个环境变量,$?,根据他能知道grep是否找到,或者grep出错。
出错和找不到是不一样的,找不到也是成功执行。出错是指打不开文件之类的错误。
-bigapple-
风吹哪页读哪页
gh_tmp1=`grep $xm_gh ${BKXSGH}`

$xm_gh 是变量值,${BKXSGH}是文件名,xm_gh 和BKXSGH都是变量

我现在的意思是:gh_tmp1有可能有值,有可能找不到,怎么使用IF语句来判断变量是否是有值还是没有找到呢?

谢谢回复
第一行加上#!/bin/bash试试,我这是可以的,不过=前后要有空格,否则是赋值(我这测试都能通过的,大概自动识别了),还有把括号改成双括号试试。
引用:
下面是引用walkerxk于2007-01-11 07:51发表的:
第一行加上#!/bin/bash试试,我这是可以的,不过=前后要有空格,否则是赋值(我这测试都能通过的,大概自动识别了),还有把括号改成双括号试试。
谢谢!
你的站点好东西很多,学习了
路过,学习一下,看有否需要的
发新话题