Linux grep命令与$?命令结合使用技巧

这篇具有很好参考价值的文章主要介绍了Linux grep命令与$?命令结合使用技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天检查前同事留下的一个shell脚本时,其中一个脚本中有一个业务逻辑处理:要判断Oracle数据库实例是否启动,如果数据库实例处于OPEN状态的话,则执行/运行一些业务逻辑操作。脚本大体如下(脚本做了一下混淆和精简收缩)

up_flag=`${SCRIPT_DIR}/chkdbup.sh ${ORACLE_SID}`

if [ ${up_flag} -eq 0 ]; then 
  .......
  exit
else
  .......
fi

其中chkdbup.sh脚本的内容如下:

ps -ef | grep -i smon_${1} | grep -v "grep" >/dev/null 
echo $?

Review这个脚本时,我感觉这个脚本的逻辑有问题(我认为这个脚本存在一个逻辑"bug"),主要是{up_flag}不为0时则表示数据库实例异常了

if [ ${up_flag} -eq 0 ]; then 
  .......
  exit
else
  .......
fi

在Linux shell脚本中,$?一般表示上一个命令的返回值(执行情况),执行成功,返回0,其他任何数值表示上条命令执行有错误。我认为数据库实例OPEN或关闭或crash的时候,chkdbup.sh这个脚本都会返回0,而不会返回值1,为了验证我的想法,于是我找了台测试环境验证测试一下。当前测试环境下ORACLE_SID为kerry

[oracle@mytestdb ~]$ ps -ef | grep -i smon_kerry | grep -v "grep"
oracle   1338965       1  0 Jul05 ?        00:00:14 ora_smon_kerry
[oracle@mytestdb ~]$ echo $?
0

换一个ORACLE_SID,此时因为Oracle实例不存在,就可以模拟实例Crash的情况(懒得关闭Oracle实例了,这个跟关闭Oracle实例测试效果一致)

[oracle@mytestdb ~]$ ps -ef | grep -i smon_gsp | grep -v "grep"
[oracle@mytestdb ~]$ echo $?
1

按照我的想法/认知,不管这个数据库实例存在或不存在,ps命令总是会执行成功,它就会返回0,而且是永远返回0,但是测试验证结果跟我的想法/认知不符合,Why?查了一些资料,然后和同事讨论后,终于搞清楚了其中的原因,主要是因为$?命令获取的上一条命令的返回结果,而上一条命令中使用了grep命令,而grep命令的返回结果是这样的:如果找到了匹配的相关记录则返回0,如果没有找到匹配的相关记录则返回1,如果执行过程中出错,就返回2,你可以使用man grep查看相关说明,具体如下所示:

EXIT STATUS
       Normally  the  exit status is 0 if a line is selected, 1 if no lines were selected, and 2 if an error occurred.  However,
       if the -q or --quiet or --silent is used and a line is selected, the exit status is 0 even if an error occurred.

其实,grep命令在HP-UX下也是同样的返回值,如下所示:

 RETURN VALUE
      Upon completion, grep returns one of the following values:

 Hewlett-Packard Company            - 3 -       HP-UX 11i Version 3 Feb 2007

 grep(1)                                                             grep(1)

           0    One or more matches found.
           1    No match found.
           2    Syntax error or inaccessible file (even if matches were
                found).

所以,我的想法/认知是错误的,而前同事也是在shell脚本中借助grep这个特性和$?来判断Oracle实例是否处于OPEN状态。这个也是一个shell脚本中的一个技巧,只是我很少用这种技巧,另外,由于对grep命令返回的值不清楚(具体来说,不清楚grep没有匹配到相关记录时返回1)。因此闹了一个乌龙事件。文章来源地址https://www.toymoban.com/news/detail-556273.html

到了这里,关于Linux grep命令与$?命令结合使用技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 1.Git使用技巧-常用命令1

    创建远端仓库: git init – bare // 创建远端裸仓库; 远端仓库别名: origin 本地仓库: git clone … 创建远程仓库 1.创建git账号和git用户组 2.创建git仓库 3.禁止git用户登录shell,这样git通过sh服务登录会被拒绝(可选) 4. 创建本地仓库 比如在我的windows电脑创建本地仓库文件夹 然后

    2024年02月13日
    浏览(35)
  • 1.Git使用技巧-常用命令2

    提示:这里可以添加本文要记录的大概内容: 本地仓库整理分为整理上一次提交和整理多次提交 1.整理上一次提交: 把当前暂存区里的内容合并到上一次commit里,而且还可以修改上一次提交的message信息。 上面命令执行后,跳出一个VIM编辑框(如左下图),此时我们可以修改

    2024年02月13日
    浏览(73)
  • 1.Git使用技巧-常用命令3

    分支介绍: Master : 稳定压倒一切,禁止尚review和测试过的代码提交到这个分支上,Master上的代码是可以随时部署到线上生产环境的。 Develop :开发分支,我们的持续集成工作在这里,code review过的代码合入到这里,我们以下要讲的BUG fix和feature开发都可以基于develop分支拉取

    2024年02月13日
    浏览(25)
  • Git常用命令,配合GitHub的使用技巧

    1、git init:初始化仓库 2、git status:查看仓库的状态 工作树和仓库在被操作过程中,状态会不断发生变化。在Git操作过程中常用git status 来查看当前状态,是基本的操作。 3、git add:向暂存区中添加文件 如果只是利用Git仓库创建了文件,那么文件并不会被记入Git 仓库的版本

    2024年01月23日
    浏览(37)
  • HP-UX下du命令使用技巧

    本人习惯了Linux环境的du命令,在HP-UX下,发现du命令真的非常难用,有种让人很难受的感觉。主要是因为HP-UX下的du命令参数比Linux平台du命令参数要少很多,尤其是没有-h这个参数,它只能以kb形式显示文件/文件夹的大小,对于我来说,看起来非常不直观。下面是工作中,HP-

    2023年04月27日
    浏览(25)
  • 【adb命令】Android实用技巧之adb命令:getprop,setprop命令使用

    一、getprop 1.1 getprop简介 getprop命令的作用就是从系统的各种配置文件中读取一些设备的信息。这些文件在我们的手机设备中是可以找到的。 1.2 查询所有的配置 会列出所有的配置信息 这些配置中以ro开头的是只读属性。 1.3 查看单个配置信息 可以在adb shell getprop后面加属性名

    2024年02月04日
    浏览(35)
  • 【Python beautifulsoup】详细介绍beautifulsoup库的使用方法,包括安装方式、基本用法、常用方法和技巧,以及结合lxml和parsel的具体使用场景和区别。

    Python beautifulsoup库是一个强大的Web抓取和解析库,它提供了丰富的功能和简单易用的API,可以帮助我们处理HTML和XML文档,从中提取数据,进行数据清洗和处理。beautifulsoup库基于Python标准库中的html.parser模块,同时还可以与第三方解析库lxml和parsel配合使用,提供更高效和灵活的

    2024年02月04日
    浏览(47)
  • 【Linux】5、使用 Linux 快捷按键小技巧

    🥁 ① 可用于强制停止某些程序的运行 🥁 ② 若命令输入错误,可用它退出当前命令 🥁 ① 退出登录的账户 🥁 ② 退出某些特定程序的专属页面 🥁 ③ 不能用于退出【vim】 python 是 Linux 操作系统自带的 🥁 用于查看历史输入过的命令 🥁 可通过 !命令前缀 快速执行第一个匹

    2024年02月03日
    浏览(19)
  • 【一些随笔】浅析 Linux和Windows:系统介绍、操作差异与使用技巧解析

    Linux和Windows系统的操作差异; Linux系统介绍、系统监控和优化技巧、Shell脚本编程技巧、一些命令使用技巧; Windows系统介绍、优化和加速技巧、一些在Windows系统下常用的快捷键; 在使用Linux和Windows时,有一些事情可能在Linux上较为顺理成章,而在Windows上可能令人费解。比如

    2024年02月13日
    浏览(34)
  • 【通过一个脚本将多个实验按序跑起来,无需人工逐个调试 & Linux使用技巧】

    在服务器上跑实验时,通常需要跑多次实验,但这些实验的差异之处仅有一两处参数的变动,如果在服务器盯着一个一个的跑,势必需要消耗大量的精力和时间; 因此,将跑所有实验的指令全部汇总到一个脚本中,只需要run一个脚本即可,无需人工变更; 还可以将每个跑完

    2024年02月15日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包