iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >shell脚本中如何获取命令的输出
  • 883
分享到

shell脚本中如何获取命令的输出

2023-06-29 07:06:34 883人浏览 安东尼
摘要

这篇“shell脚本中如何获取命令的输出”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“shell脚本中如何获取命令的输出”文

这篇“shell脚本中如何获取命令的输出”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“shell脚本中如何获取命令的输出”文章吧。

通常情况下,在shell脚本中需要获取命令的输出内容,然后根据输出内容判断下一步的执行操作。

比较常用的一种方式就是, 匹配命令输出的内容中是否存在某些关键字,选择执行的不同动作。
比较常用的一种方式就是采用反向单引号的方式 --  保存结果的变量名=`需要执行的linux命令`

这种方式在使用时,有些细节的地方需要注意。 先用几个例子来说明一下。

比如在Centos7环境中,使用rpm -qa命令查询某些rpm包是否安装,没有安装的话进行安装操作。

举个简单的例子来说:

#!/bin/bashcheck_results=`rpm -qa | grep "zlib"`echo "command(rpm -qa) results are: $check_results"if [[ $check_results =~ "zlib" ]] then     echo "package zlib has already installed. "else     echo "This is Going to install package zlib" fi

保存为test.sh文件,然后运行

$bash test.sh

结果为:

command(rpm -qa) results are: zlib-1.2.7-13.el7.x86_64
package zlib has already installed. 

这个脚本基本上是可以工作的。

那么,我们同样使用类似的方式来检查iscsi-initiator软件包是否安装。 与上一个命令不同的是,这个命令是否安装不能通过rpm -qa命令获取。

我们采取另一种方式

#!/bin/bashcheck_results=`iscsiadm --version | grep iscsiadm`echo "check command(iscsiadm) available results are: $check_results"if [[ $check_results =~ "iscsiadm" ]] then     echo "command iscsiadm could be used already."else         echo "command iscsiadm can't be used. Install it"    rpm -ivh iscsi-initiator-utils-6.2.0.873-29.el7.x86_64.rpmfi

执行的结果为:

$ bash test.sh
check command(iscsiadm) available results are: iscsiadm version 6.2.0.873-28
command iscsiadm could be used already.

这时候看起来脚本是工作正常的,显示iscsiadm已经可用。那么假如一开始的时候iscsiadm命令不可用呢?

我们可以将上面的check_results=`iscsiadm --version | grep iscsiadm`改成为check_results=`iscsiadmm --version | grep iscsiadm`

这样我们故意将命令写错,模拟命令没有安装的情况下脚本的运行。

修过后执行结果如下

$ bash test.sh
test.sh: line 2: iscsiadmm: command not found
check command(iscsiadm) available results are: 
command iscsiadm can't be used. Install it

看起来好像也是工作正常的,但是为什么check_results的内容为空呢? 难道不应该将“command not found: iscsiadmm”内容赋值给check_results,然后打印显示出来吗?

我们将iscsiadmm --version | grep iscsiadm单独在命令行中执行,也是有输出的啊,为什么不能赋值成功呢?

这个时候如果我们在命令执行完毕之后,执行命令echo$? 这个时候得到的值为127(Centos7系统)。在命令行中单独执行scsiadm --version | grep iscsiadm命令之后,执行echo $?得到的值为0(Centos7系统)

从这里可以看出在使用··(2个反向单引号)的方式获取执行结果时需要保证单引号内的命令是可以执行成功的。

就算是这样就能保证我们可以获取到想要的内容吗? 不一定,再来看个例子。

#!/bin/bashcheck_results=`java -version`echo "check java version results are: $check_results"if [[ $check_results =~ "1.8." ]] then     echo "java version is 1.8, it seems not need to install java again."else         echo "It is going to install jdk 1.8 version"fi

执行结果为:

$ 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脚本中如何获取命令的输出”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: shell脚本中如何获取命令的输出

本文链接: https://www.lsjlt.com/news/323419.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • shell脚本中如何获取命令的输出
    这篇“shell脚本中如何获取命令的输出”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“shell脚本中如何获取命令的输出”文...
    99+
    2023-06-29
  • shell 脚本中获取命令的输出的实现示例
    这个主要介绍的方法是获取命令的输出内容,而不是命令执行成功与否的返回值。 通常情况下,在shell脚本中需要获取命令的输出内容,然后根据输出内容判断下一步的执行操作。 比较常用的一种方式就是, 匹配命令输出的内容中是否存...
    99+
    2022-06-05
    shell 获取命令输出 shell命令输出
  • shell脚本中获取命令的输出的实现示例
    这个主要介绍的方法是获取命令的输出内容,而不是命令执行成功与否的返回值。 通常情况下,在shell脚本中需要获取命令的输出内容,然后根据输出内容判断下一步的执行操作。 比较常用的一种...
    99+
    2022-11-13
  • python 捕获shell脚本的输出结果实例
    import subprocess output =Popen(["mycmd","myarg"], stdout=PIPE).communicate()[0] import subprocess p =...
    99+
    2022-06-04
    脚本 实例 python
  • Linux环境shell脚本获取时间的常用命令总结
    本篇内容介绍了“Linux环境shell脚本获取时间的常用命令总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 相关概念Linux的系...
    99+
    2023-06-16
  • PHP执行Shell脚本或Bash脚本文件并返回命令输出详情
    PHP执行shell脚本或者Bash脚本文件实例。 system和exec函数可能被配置文件禁用,可以通过修改php配置文件删除被禁用的函数。 1.通过system函数执行 使用实例: ...
    99+
    2023-08-31
    bash php 开发语言
  • 如何获取shell脚本自身所在目录的Shell脚本
    这篇文章主要讲解了“如何获取shell脚本自身所在目录的Shell脚本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何获取shell脚本自身所在目录的Shell脚本”吧!简单版下面是一个最...
    99+
    2023-06-09
  • python 捕获 shell/bash 脚本的输出结果实例
    #!/usr/bin/python ## get subprocess module import subprocess ## call date command ## p = subprocess....
    99+
    2022-06-04
    脚本 实例 python
  • shell脚本读取命令行参数的实现
    目录前提选项与参数:一.手工处理方式(已验证)二.getopts/getopt三.总结前提 在编写shell程序时经常需要处理命令行参数 选项与参数: 如下命令行: ./test.sh -f config.con...
    99+
    2022-06-04
    shell 读取命令行参数 shell 命令行参数
  • 如何在shell脚本中获取进程ID
    这篇文章给大家介绍如何在shell脚本中获取进程ID,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。shell脚本在执行时,会启动子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处...
    99+
    2023-06-28
  • Shell脚本中的printf命令使用
    上一章节我们学习了 Shell 的 echo 命令,本章节我们来学习 Shell 的另一个输出命令 printf。 printf 命令模仿 C 程序库(library)里的 printf() 程序。 printf 由 P...
    99+
    2023-05-12
    Shell printf命令 Shell printf
  • Linux Shell脚本中如何获取本机ip地址
    小编给大家分享一下Linux Shell脚本中如何获取本机ip地址,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是Linux系统Linux是一种免费使用和自由...
    99+
    2023-06-09
  • 如何使用Shell脚本test命令
    这篇文章主要讲解了“如何使用Shell脚本test命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Shell脚本test命令”吧!Shell中的 test 命令用于检查某个条件是否...
    99+
    2023-06-09
  • 用shell命令读取与输出数据的代码
    shell脚本读取数据有以下几种方式:1.键盘输入,默认2.从文件中读取3.通过管道命令传递 echo的功能:c :不换行f :进纸t :跳格n :换行表示转义,例如:""/dev/rmt0""翻译为,"/...
    99+
    2022-06-04
    命令 代码 数据
  • shell脚本如何实现获取图片
    这篇文章主要介绍了shell脚本如何实现获取图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。shell脚本实现获取图片。#!/usr/bin/bash. /etc/init...
    99+
    2023-06-04
  • shell脚本如何获取隐含参数
    这篇文章给大家分享的是有关shell脚本如何获取隐含参数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。脚本涉及:gethidpar.sql 获取隐含参数     ...
    99+
    2023-06-06
  • shell脚本怎样整合json数值输出从而获取硬件信息
    shell脚本怎样整合json数值输出从而获取硬件信息,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。查看硬件信息,并将信息整合成json数值,然后传给前段进行分...
    99+
    2023-06-05
  • 如何用PHP执行shell 脚本和 shell命令
    执行 shell 脚本: 或者首先使用 ssh2_connect 函数连接到远程主机,然后使用 ssh2_auth_password 函数进行身份验证。接下来,使用 ssh2_exec 函数执行 shell 脚本,将其输出流作为结果返回。...
    99+
    2023-08-31
    php linux 开发语言 Powered by 金山文档
  • 如何用shell脚本执行hadoop命令
    要使用shell脚本执行Hadoop命令,可以按照以下步骤操作:1. 创建一个新的文本文件,并使用任何文本编辑器打开它(如vi、na...
    99+
    2023-10-11
    hadoop
  • 如何使用linux shell脚本xargs命令
    本篇内容主要讲解“如何使用linux shell脚本xargs命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用linux shell脚本xargs命令”吧!xargs是给命令传递参数的...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作