【发布时间】:2019-06-08 06:18:20
【问题描述】:
如何比较 bash 命令输出并使用 IF ELSE 块做某事。
我正在尝试在 CMD 变量中捕获 bash 命令输出,如果该变量为空/零,则输出缺少二进制/功能。很基本。
在下面的代码中,第二个 if else
# Check if the CPU supports KVM
cmd=$(grep -Eiw 'vmx|svm' /proc/cpuinfo)
if [[ $cmd -ne 0 ]];then
echo "CPU on this machine does not support KVM. Check documentation please"
fi
#!/bin/bash
# Check if KVM kernel modules are installed.
cmd=$(lsmod | awk '{print $1}' | grep -Eiw 'kvm\|kvm_intel\|kvm_amd')
if [[ $cmd -ne 0 ]];then
echo "KVM kernel modules kvm or kvm_[intel|amd] missing. Use modprobe to load them please"
fi
# Check if the CPU supports KVM
cmd=$(grep -Eiw 'vmx|svm' /proc/cpuinfo)
if [[ $cmd -ne 0 ]];then
echo "CPU on this machine does not support KVM. Check documentation please"
fi
脚本不只是检查条件,而是打印命令输出(/proc/cpuinfo),我只希望它打印回显行而不是命令输出。
【问题讨论】:
-
您是要检查
grep返回 还是它输出 到stdout 的内容?这是两个不同的东西。cmd=$(grep ...)捕获输出。 -
我正在尝试 grep 一个字符串 ...如果该字符串存在,则执行某些操作,如果 grep 输出中不存在该字符串,请执行其他操作。
-
我知道您正在尝试 grep 字符串。我试图了解您试图从 grep 中检查的结果。根据
grep的手册页,通常退出状态如果选择了一行,则为 0,如果没有选择行,则为 1,如果发生错误,则为 2。如果您正在检查退出状态,那么您就走错了路。如果您想要退出状态,请在执行grep后立即检查$?。如果有匹配,它将具有值 0。您不会使用cmd=$(grep ...)获得退出状态。 -
我没有检查退出代码。我正在尝试的是以下 cmd=$(grep -Eiw 'vmx|svm' /proc/cpuinfo)
-
如果您不尝试检查退出代码,那么您为什么要检查
grep的结果与0?grep -Eiw 'vmx|svm'...的结果将是一行或多行包含vmx或svm,或者根本没有行。在完全没有行的情况下,grep不会输出 0。
标签: bash