shell 脚本中获取执行系统命令的输出结果
个主要介绍的方法是获取命令的输出内容,而不是命令执行成功与否的返回值。
通常情况下,在shell脚本中需要获取命令的输出内容,然后根据输出内容判断下一步的执行操作。
比较常用的一种方式就是, 匹配命令输出的内容中是否存在某些关键字,选择执行的不同动作。
比较常用的一种方式就是采用反向单引号的方式 -- 保存结果的变量名=`需要执行的linux命令`
这种方式在使用时,有些细节的地方需要注意。 先用几个例子来说明一下。
比如在CentOS7环境中,使用rpm -qa命令查询某些rpm包是否安装,没有安装的话进行安装操作。
举个简单的例子来说:
#!/bin/bash
check_results=`rpm -qa | grep "zlib"`
echo "command(rpm -qa) results are: $check_results"
if [[ $check_results =~ "zlib" ]]
echo "package zlib has already installed. "
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/bash
check_results=`iscsiadm --version | grep iscsiadm`
echo "check command(iscsiadm) available results are: $check_results"
if [[ $check_results =~ "iscsiadm" ]]
echo "command iscsiadm could be used already."
echo "command iscsiadm can't be used. Install it"
rpm -ivh iscsi-initiator-utils-6.2.0.873-29.el7.x86_64.rpm
fi
执行的结果为:
$ bash test.sh
check command(iscsiadm) available results are: iscsiadm version 6.2.0.873-28
command iscsiadm could be used already.
这时候看起来脚本是工作正常的,显示iscsiadm已经可用。
再来看个例子:
#!/bin/bash
check_results=`java -version`
echo "check java version results are: $check_results"
if [[ $check_results =~ "1.8." ]]