我想将grep结果与变量进行比较。这是我的bash脚本
check=$(grep "pam_wheel.so use_uid" /etc/pam.d/su)
result='#auth required pam_wheel.so use_uid'
if [ "$check" = "$result" ]; then
echo "Access is not limited"
else
echo " limited access"
fi
我该怎么办?我尝试了很多组合,但我无法让它发挥作用。 提前致谢。
答案 0 :(得分:3)
/etc/pam.d/*
中的线条间隔得很好。 grep
和test
是间隔敏感的(或者更确切地说,对要比较的字符串中字节的任何语义不敏感) - 如果字符串不完全相等,则比较将失败。 / p>
规范化间距的快速而合理的方法是使用在空格上分割的工具,例如Awk。
if awk -v x=1 '$1 == "#auth" && $2 == "required" &&
$3 == "pam_wheel.so" && $4 == "use_uid" {x=0}
END{exit x}' /etc/pam.d/su
then
echo "Access is not limited"
else
echo "Access is limited"
fi
或shell本身:
while read -r auth req so opts; do
case $so:$opts in "pam_wheel.so:use_uid")
test "$auth:req" == "#auth:required" &&
echo "Access is not limited" ||
echo "Access is limited" ;;
esac
done </etc/pam.d/su
或两者的结合(这可能是最优雅的)。
或者,明确标准化所有空格:
case $(tr -s '\t ' ' ' </etc/pam.d/su | grep -m 1 "pam_wheel.so use_uid") in
'#auth required pam_wheel.so use_uid')
echo "Access is not limited";;
*) echo "Access is limited";;
esac
(另请注意这是如何避免输出的讨厌的临时变量。)
答案 1 :(得分:1)
您可以使用awk
。
awk '/pam_wheel.so use_uid/ { if ($0 == "#auth required pam_wheel.so use_uid") {print "yes"; } else { print "no";} } ' /etc/pam.d/su
/pam_wheel.so use_uid/{
if ($0 == "#auth required pam_wheel.so use_uid") {
print "yes";
} else {
print "no";
}
}
/pam_wheel.so use_uid/
:将以下脚本应用于包含字符串_pam_wheel.so的行__ use_uid _ $0
:包含已处理的当前行(与您的模式匹配的行),我们会再次测试您的值。if…else
结构答案 2 :(得分:0)
它不是你问题的答案,但也许它可以帮助你。
result='#auth required pam_wheel.so use_uid'
grep "$result" /etc/pam.d/su && echo "Access is not limited" ||echo " limited access"
你的方法的另一个方面是,如果你在grep中得到多个结果,你的结果变量将具有完整的两个结果,并且它将与你的$ result变量不匹配。
check=$(grep -m 1"pam_wheel.so use_uid" /etc/pam.d/su)
result='#auth required pam_wheel.so use_uid'
if [ "$check" = "$result" ]; then
echo "Access is not limited"
else
echo " limited access"
fi
如果您的文件在文本周围有额外的空格,那么您必须修剪字符串以匹配。查看您可以使用的变量值
check=$(grep -m 1"pam_wheel.so use_uid" /etc/pam.d/su)
result='#auth required pam_wheel.so use_uid'
echo "D""$check""D"
echo "D""$result""D"
这里D是任何其他字符,供您查看两个变量是否具有相同的空格数(这可能是比较失败的原因)。
希望help.happy脚本编写:)