shell脚本中grep命令及if判断 5C

我想写一个脚本
通过orderid在20_$date1.data这个文件中查找包含orderid行,通过/dev/null 2>&1返回值判断是否存在此orderid行,再根据if else对包含该orderid行进行更改,可是 执行的时候总是返回 1 is not exist(我用grep单纯查找的时候是可以找到的,并且orderid并不是1),这段脚本哪里不正确呢?

 grep "$orderid" 20_$date1.data >/dev/null 2>&1
if [ $? -eq 0 ] && [ "$status" = "1" ]; then
echo $orderid " is exist"
sed -n -i '/$orderid/s/SUCCESS|0|扣款成功/FAIL|G002|交易失败/' $Apphome1/testBatchCutResp/20_$date1.data

elif [ $? -eq 0 ] && [ "$status" = "2" ]; then
echo $orderid " is exist"
sed '/$orderid/d'

else
echo $orderid " is not exist"

fi

4个回答

$status 这个是通过什么得出来的。

BlackSheeppp
克里斯玛 执行脚本时候赋的变量,orderid date1 status 都是赋值变量
一年多之前 回复

在sed中使用变量必须是双引号

BlackSheeppp
克里斯玛 grep "$orderid" 20_$date1.data >/dev/null 2>&1 if [ $? -eq 0 ] && [ "$status" = "1" ]; then echo $orderid " is exist" sed -n -i '/"$orderid"/s/SUCCESS|0|扣款成功/FAIL|G002|交易失败/' $Apphome1/testBatchCutResp/20_$date1.data elif [ $? -eq 0 ] && [ "$status" = "2" ]; then echo $orderid " is exist" sed '/"$orderid"/d' else echo $orderid " is not exist" fi
一年多之前 回复

grep "$orderid" 20_$date1.data >/dev/null 2>&1
if [ $? -eq 0 ] && [ "$status" = "1" ]; then
echo $orderid " is exist"
sed -n -i '/"$orderid"/s/SUCCESS|0|扣款成功/FAIL|G002|交易失败/' $Apphome1/testBatchCutResp/20_$date1.data

elif [ $? -eq 0 ] && [ "$status" = "2" ]; then
echo $orderid " is exist"
sed '/"$orderid"/d'

else
echo $orderid " is not exist"

fi

加上双引号 还是返回 1 is not exist

[ "$status" = "1" ] 和 [ "$status" = "2" ] 应该用==吧。即[ "$status" == "1" ] 、 [ "$status" == "2" ]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
shell脚本工具之grep命令
   grep(缩写来自Globally search a Regular Expression and Print)是Linux系统的一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.egrep和fgrep都是grep的扩展,支持更多的re元字符,fgrep就是fixed grep或fast grep.linux使用GNU版本的grep,它功能更强,可以通过-G、-E、-...
shell脚本【命令4】grep:文本检索
一、综述 grep是一个强大的文本检索工具。 其基本语法格式简写如下: grep options string file 即:从特定file中,检索string。当然也不限定是file,grep接收标准输入,所以,grep可以用于管道符,和标准输入重定向。 二、使用介绍 2.1 基本选项 -i...
Shell脚本中find和grep命令的区别
在shell脚本中find 和 grep 同样都是搜索命令。 find命令 find 命令用于在系统中搜索符合条件的文件名,如果需要模糊査询,则使用通配符进行匹配。搜索时文件名是完全匹配的。 例如: [root@localhost ~]# touch abc #建立文件abc [root@localhost ~]# touch abcd #建立文件abcd [root@localhost ~]# ...
跪求shell脚本高手指点--sed grep 命令
有一文件 file.txt内容:rnaaa\(bb1rnaaa\(bb2rnccc\ dd1rnccc\ dd2rnrn有一脚本 file_sh.sh内容:rn#!/bin/bashrnfile="file.txt"rngrep_info_excap=`echo "$1" | sed -e 's/(/\\\\\\\\\\\(/g' | sed -e 's/ /\\\\\\\\\\\ /g'`rnecho $grep_info_excaprnecho "cat $file | grep "$grep_info_excap" | tail -n 1"rnfor reader in `cat $file | grep "$grep_info_excap" | tail -n 1`rndorn program_cmd="$program_cmd $reader"rndonernecho ------------------------------------------- rnecho $program_cmdrnrn命令1:rnroot@u-07:~#file_sh.sh c\ drn预期结果:rnc\\\ drncat file.txt | grep c\\\ d | tail -n 1rn-------------------------------------------rnccc\ dd2rnrn实际结果与之一致。rnrn命令2:rnroot@u-07:~#file_sh.sh a\(brna\\\(brncat file.txt | grep a\\\(b | tail -n 1rn-------------------------------------------rnaaa\(bb2rnrn实际:rna\\\(brncat file.txt | grep a\\\(b | tail -n 1rngrep: 不匹配的 ( 或 \(rn-------------------------------------------rnrn请求shell高手指点。。。谢谢!
Unix中的grep命令
       grep在一个或多个文件中查找与模式字符串(pattern)匹配的行,并将搜索的结果打印出来,不会修改原文件内容。 使用grep 命令的语法为:  $grep [option(s)] pattern [file(s)]          其中option为grep命令的选项,pattern为要匹配的简单字符串或携带特殊字符的模式字符串,file为文件列表,可有多个文件。 ...
linux中grep命令
grep是linux中强大的文本搜索工具,能使用正则表达式搜索文本。 grep的基础语法: -a:将binary文件(二进制数据)以text文件的方式搜寻数据 -c:计算找到的‘搜寻字符串的次数’ -i:忽略大小写 -n:顺便输出行号 -v:输出没有‘搜寻字符串’内容的那一行 --color=auto:将找到的关键词部分加上颜色显示 这几个为grep的常用命令,还有一些命令
定时任务执行shell脚本中 grep -v grep 中的坑
需求 有一个后台进程会异常挂掉,没有时间去看错误记录,需要暴力重启该进程,每次都手动的执行觉得很麻烦,于是写了个简单的shell脚本来定时执行。 脚本 第一次写的脚本 解释:一开始上如上图这样,./test.sh 跑一下,是可以的。但是用定时器来跑失败。 分析: ps 命令将某个进程显示出来 。-e 显示所有进程。-f 全格式。 grep 查找字符 grep -v grep 是过滤掉自己执行...
shell脚本中,grep命令可以接受传入变量吗?
假设targetdisk是/dev/sdc,那么以下这条语句错哪里了,怎么改?rntmp=`fdisk -l 2>/dev/null |grep Disk |cut -d : -f1 |cut -d ' ' -f2 |[color=#FF0000]grep $targetdisk|[/color]cut -d / -f3`
shell脚本之grep使用详解
- Grep –help讲解 - [options]主要参数: -c:只输出匹配行的计数。 -i:不区分大 小写(只适用于单字符)。 -h:查询多文件时不显示文件名。 -l:查询多文件时只输出包含匹配字符的文件名。 -n:显示匹配行及 行号。 -s:不显示不存在或无匹配文本的错误信息。 -v:显示不包含匹配文本的所有行。 - 正则表达式的基础讲解 pattern正则表达式主要
shell脚本学习(二)-grep
1.     grep/egrep       -c  :打印符合要求的行数      -n :在输出符合要求的行的同时连同行号一起输出      -v :打印不符合要求的行       -r : 会把目录下面所有的文件全部遍历一遍       -i : 忽略大小写 2.     例子介绍        过滤出带有某个关键词的行并输出行号
Shell脚本学习笔记——grep
grep是一款强大的文本过滤工具,按照关键字或者正则表达式进行行过滤。常见选项
grep命令
0x00 前言        前几天微博推送关于grep原作者Mike Haertel的采访视频,突然觉得grep是一个很强大的工具,以前在使用Ubuntu的工程中,一直使用find,但是我最近在使用grep中,发现借助–help选项并不能很好的驾驭这个工具,我一直可以通过原命令提供Usage来学习某一个命令总是一项必要的能力,尤其在linux系统下编程,...
grep 命令
# grep命令的东西很多,这次只对常用的进行总结 【命令选项】  -n  显示匹配行行号  -v  输出匹配行之外的内容  -E  扩展正则  -I   忽略大小写 【命令示例】 示例中用到的文本 [lyf@test comm_test]$ cat sed_test lyf lyf lyf123 sty sty123 sty stylyf 1
命令grep
文件中查找匹配行
Grep命令
^ 表示待匹配串的开始位置 $ 表示待匹配串的结束位置 默认代表起始和结束位置,^在[]内时表示非
管道命令及grep命令
管道命令:连接多个linux命令符号:|命令1 | 命令2 将命令1连接到命令2 上grep命令:字符串搜索格式:grep 需要搜索的字符串 搜索的文件参数:-i 忽略大小写查找数据  返回关键字所在行例:grep class Dem.java返回结果:public class Dem{通常情况下,grep命令要与其他命令一起连用,例如管道命令例:查询当前目录下所有带t 关键字的行数据命令: ll...
文本处理命令——grep命令
详细的介绍shell脚本的使用。
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制