Bash 脚本 - 如果案例 $? > 0
Bash scripting - if cases $? > 0
对于可能出现的垃圾邮件,我深表歉意,我正在完成 RHEL 安全 Hardening/Auditing 脚本,最后我想要一个总体结果。
例如,
# PermitEmptyPasswords
grep -E '^\s*PermitEmptyPasswords\s+no\s*' /etc/ssh/sshd_config &> /dev/null
if [ $? = 0 ];
then echo "[ OK ] PermitEmptyPasswords is properly configured";
else echo "[ ERROR ] PermitEmptyPasswords is not properly configured";
fi
现在,我对总体结果(Safe/Not 安全)的想法是对所有这些求和 if $?情况下,如果所有情况的总和为 0,它将回显 "This system is properly configured by hardening policy",否则回显 "This system has errors" + 重新打印所有错误,其中 $? > 0.
如何获得这项工作?我是编写脚本的新手,所以任何帮助都将不胜感激。
提前致谢。
您可以做的是:
创建一个空变量并为其赋值 0
count=0
每当退出状态大于 0 时,将其递增 1。示例:
if [[ $? -gt 0 ]]; then ((count++)); fi
要在最后打印出来,你可以做一个简单的数组,但我认为只需将内容附加到文件中,然后在最后读取就足够了。
if [[ $? -gt 0 ]]; then ((count++)) && echo "whatever" >>filename; fi
最后,只需 cat 文件名并显示错误数,只需回显计数变量:
echo "Count number: $count"
P.S 如果您使用 bash 作为 shell,请使用双括号和右括号。
@py9 已经回答了这个问题,但我想指出一点:在测试命令是否成功时,直接使用命令作为 if
条件更简单并且更健壮一些,而不是使用 $?
来检查其退出状态。此外,您可以使用 grep -q
(安静模式),而不是将 grep
的输出重定向到 /dev/null。最后(正如@CharlesDuffy 指出的那样),grep -E
理解扩展的正则表达式语法,它不包括 \s
(这是 PCRE 的一部分——perl 兼容的正则表达式——语法)。所以使用这样的东西:
if grep -q -E '^[[:space:]]*PermitEmptyPasswords[[:space:]]+no[[:space:]]*' /etc/ssh/sshd_config; then
echo "[ OK ] PermitEmptyPasswords is properly configured"
else
echo "[ ERROR ] PermitEmptyPasswords is not properly configured"
((count++))
fi
对于可能出现的垃圾邮件,我深表歉意,我正在完成 RHEL 安全 Hardening/Auditing 脚本,最后我想要一个总体结果。 例如,
# PermitEmptyPasswords
grep -E '^\s*PermitEmptyPasswords\s+no\s*' /etc/ssh/sshd_config &> /dev/null
if [ $? = 0 ];
then echo "[ OK ] PermitEmptyPasswords is properly configured";
else echo "[ ERROR ] PermitEmptyPasswords is not properly configured";
fi
现在,我对总体结果(Safe/Not 安全)的想法是对所有这些求和 if $?情况下,如果所有情况的总和为 0,它将回显 "This system is properly configured by hardening policy",否则回显 "This system has errors" + 重新打印所有错误,其中 $? > 0.
如何获得这项工作?我是编写脚本的新手,所以任何帮助都将不胜感激。 提前致谢。
您可以做的是:
创建一个空变量并为其赋值 0
count=0
每当退出状态大于 0 时,将其递增 1。示例:
if [[ $? -gt 0 ]]; then ((count++)); fi
要在最后打印出来,你可以做一个简单的数组,但我认为只需将内容附加到文件中,然后在最后读取就足够了。
if [[ $? -gt 0 ]]; then ((count++)) && echo "whatever" >>filename; fi
最后,只需 cat 文件名并显示错误数,只需回显计数变量:
echo "Count number: $count"
P.S 如果您使用 bash 作为 shell,请使用双括号和右括号。
@py9 已经回答了这个问题,但我想指出一点:在测试命令是否成功时,直接使用命令作为 if
条件更简单并且更健壮一些,而不是使用 $?
来检查其退出状态。此外,您可以使用 grep -q
(安静模式),而不是将 grep
的输出重定向到 /dev/null。最后(正如@CharlesDuffy 指出的那样),grep -E
理解扩展的正则表达式语法,它不包括 \s
(这是 PCRE 的一部分——perl 兼容的正则表达式——语法)。所以使用这样的东西:
if grep -q -E '^[[:space:]]*PermitEmptyPasswords[[:space:]]+no[[:space:]]*' /etc/ssh/sshd_config; then
echo "[ OK ] PermitEmptyPasswords is properly configured"
else
echo "[ ERROR ] PermitEmptyPasswords is not properly configured"
((count++))
fi