기존 파일의 일부 데이터를 확인하는 스크립트를 작성하려고 합니다. 예:
#!/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로 설정되어 있는지 알려주기를 원합니다. 값이 7이 아닌 0이면 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
명령이 작동하려면 백틱(`)을 사용해야 합니다. 질문에 제공된 코드에서 두 개의 정적 문자열을 비교합니다. `!='