我正在尝试编写一个脚本来检查现有文件中的某些数据。例子:
#!/bin/bash
set -x
if [ 'grep PASS_WARN_AGE /etc/login.defs' == 'PASS_WARN_AGE 7' ]; then
echo "RHEL-06-000054 not a finding"
elif [ 'grep PASS_WARN_AGE /etc/login.defs' == 'PASS_WARN_AGE 0' ]; then
sed -ie 's/PASS_WARN_AGE\s\s\s\s0/PASS_WARN_AGE 7/g' /etc/login.defs
else echo "Needs further review"
fi
该脚本忽略了 if 和 elif 字符串,仅回显“需要进一步审查”字符串。本质上,我希望这个脚本告诉我当前值是否设置为 7。如果该值是 0 而不是 7,则它执行 sed 命令,更改文件 /etc/login.defs 中的值。如果出现一些未知的输出,它会告诉用户需要进一步检查。感谢所有帮助。
答案1
我想到了。
#!/bin/bash
set -x
grep -q 'PASS_WARN_AGE 7' /etc/login.defs
if [ ${?} -eq 0 ]; then
echo "RHEL-06-000054 not a finding"
grep -q 'PASS_WARN_AGE 0' /etc/login.defs
elif [ ${?} -eq 0 ]; then
sed -ie 's/PASS_WARN_AGE\s\s\s\s0/PASS_WARN_AGE 7/g' /etc/login.defs; echo "RHEL-06-000054 patched"
else echo "needs further review"
fi
答案2
如果您愿意,您可以无条件地运行sed
该文件:
sed -i .bak -Ee 's/^PASS_WARN_AGE\s+0/PASS_WARN_AGE 7/' /etc/login.defs
我会谨慎使用类似的模式,\s\s\s\s
因为空白的数量可能会有所不同。我不认为\s
这是标准的,但我想如果上下文是 RHEL,无论如何你都会有 GNU sed。
答案3
您需要使用反引号(`)来让命令工作,在您的问题中提供的代码中您比较两个静态字符串。 `!='