shell – 如果从文件匹配模式,如何返回0?
作者:互联网
参见英文答案 > Can grep return true/false or are there alternative methods 6个
我有一个二进制文件重新包装android内核(而不是mkbootimg).
我正在编写一个脚本来自动化该过程.
我不希望屏幕上有任何输出.所以我将输出重定向到名为foo.log的文件.
该命令是 – kernel_make“$zImage”“$ramdisk”“$cmdline”“$image”&>数据/本地/工作/ foo.log
我当前的工作文件夹是data / local / working /.
我要做的是,如果输出的最后一行(foo.log)是这样的 –
“targed file $1是sucesfully修补,享受新内核”
然后返回0并退出.否则返回1并退出.
我正在尝试使用grep,但是由于我是命令行的新手,所以不要以正确的方式做到这一点.
解决方法:
grep是要走的路,如果找到匹配则返回0.您实际上不需要输出该行,因此只需丢弃该行并使用该测试.在你的情况下,它只是
lastline=$(tail -n1 logfile)
if grep pattern <<<"$lastline" &>/dev/null; then
echo "yay, found pattern"
else
echo "darn"
fi
观察“here string”结构<<<它将字符串显示为grep读取的文件,并且&>它重定向标准输出和错误输出(在这种情况下重定向到null).模式可以是“享受”或其他东西.用自定义处理替换回声.
但是,如果kernel_make失败则检查kernel_make是否返回1会更有意义.无需解析用户友好的日志输出(可能会更改或不再是最后一条消息).如果是这种情况(最有可能),我就是这么做的
kernel_make [...arguments...] && echo "yay" || echo "nay"
(或if语句,如grep情况).您可能熟悉exit语句,如果失败,您可能会在表单exit 1中使用它.
如果kernel_make是脚本的最后一行,你甚至不需要做任何事情……
标签:android,shell,grep,kernel,shell-script 来源: https://codeday.me/bug/20190816/1669543.html