#!/bin/bash
check_results=`java -version`
echo "check java version results are: $check_results"
if [[ $check_results =~ "1.8." ]]
echo "java version is 1.8, it seems not need to install java again."
echo "It is going to install jdk 1.8 version"
执行结果为:
$ bash test.sh
java version "1.8.0_73"
Java(TM) SE Runtime Environment (build 1.8.0_73-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)
check java version results are:
It is going to install jdk 1.8 version
怎么回事?命令jdk已经安装了,为什么还是没有匹配到呢?根据第二个例子,我们手动执行命令 java -version 然后执行命令$? 得到的结果为0, 说明命令是执行成功的。怎么还是没有获取到命令的输出呢?
这个现象出现的原因是有可能命令的执行结果被重定向了。
试着将check_results=`java -version` 改成check_results=`java -version 1> /dev/stdout` 和 check_results=`java -version 2> /dev/sdtout` 看看输出是否有变化
为了防止这种情况的发生,最终我们将上面改成check_results=`java -version 2>&1` 这样得到了想要的结果。
使用 保存结果的变量名=`需要执行的linux命令` 这种方式来获取命令的输出时,注意的情况总结如下:
1)保证反单引号内的命令执行时成功的,也就是所命令执行后$?的输出必须是0,否则获取不到命令的输出
2)即便是命令的返回值是0,也需要保证结果是通过标准输出来输出的,而不是标准错误输出,否则需要重定向
因此我们推荐使用 保存结果的变量名=`需要执行的linux命令 2>&1 `的方式来获取命令的执行结果。
感兴趣的朋友可以试下第二个例子中改成 check_results=`iscsiadmm --version 2>&1`的结果。
此外还有一种获取命令执行返回值的方式 变量名=$(需要执行的命令) 对于这种方式没有进行测试,所以不再此讨论。
对于上面提到的获取命令执行输出的情况,和获取函数执行结果的方式并不同,请在使用中进行注意。
到此这篇关于shell 脚本中获取命令的输出的实现示例的文章就介绍到这了,更多相关shell 脚本中获取命令输出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
2006-2023 脚本之家 JB51.Net , All Rights Reserved.
苏ICP备14036222号