2014-09-02 4 views
0

Solaris 5.10에서 작업 중이며 /etc/default/passwd을 구문 분석하고 최소 암호 길이를 확인하고 싶습니다. 다음은 내가 사용 스크립트입니다 :solaris에서 awk 사용

if awk -v x=1 '$1 == "PASSLENGTH" && $2 == "6" {x=0} END{exit x}' /etc/default/passwd 
     then 
      echo "Control Area: User Identity Management; Ensure that minimum password length is set ; compliant" >> /etc/chef/report.txt   
     else 
      echo "Control Area: User Identity Management; Ensure that minimum password length is set ; Non compliant" >> /etc/chef/report.txt   
     fi 

최소 PASSLENGTH6 같은 경우, 내 report.txt 파일로 준수 에코. 하지만 문제는 내 코드가 PASSLENGTH 변수의 값이 6 인 경우에도 /etc/default/passwd에있는 if 블록 안에 들어 가지 않습니다.

+0

왜 awk인가? python에서 이것을 쓴다면 더 많은 도움을 얻을 수 있습니다. – bmargulies

+0

awk 명령을 독자적으로 실행하고 결과를 확인하십시오. 두 인수가 일치하지 않을 가능성이 있습니다. –

+2

Solaris! = linux. 당신은 리눅스 태그를 제거해야합니다. – Kent

답변

2

PASSLENGTHPASSLENGTH=N의 형식으로 작성됩니다.
Awk는 공백/탭/개행을 기본 구분 기호로 사용합니다.
즉, 은 실제로 PASSLENGTH=6이고 $2은 if 문이 실패하는 이유를 설명하지 않습니다. 당신이 시작

awk -F= '$1 == "PASSLENGTH" && $2 != "6" {x=1} END{exit x} 

모든 AWK시 변수를 선언 할 필요 없다, 그래서

또한

if awk -F= -v x=1 '$1 == "PASSLENGTH" && $2 == "6" {x=0} END{exit x}' /etc/default/passwd 
     then 
      echo "Control Area: User Identity Management; Ensure that minimum password  length is set ; compliant" >> /etc/chef/report.txt   
     else 
      echo "Control Area: User Identity Management; Ensure that minimum password length is set ; Non compliant" >> /etc/chef/report.txt   
fi 

당신이 AWK를 변경할 수보십시오, 내가 생각하는 짧은이 될 수

awk '/^PASSLENGTH=6/{x=1} 
    END {print "Control Area: User Identity Management; Ensure that minimum password length is set; " (x?"compliant":"non compliant") >> "/etc/chef/report.txt"}' /etc/default/passwd 
+0

nawk로 작업 한 스크립트가 실행되었습니다. – tortuga

+0

구성 파일에 줄의 시작 부분에'# '이 포함될 수 있습니다. 더 강력한 솔루션은'/^PASSLENGTH = 6 /'일 수 있습니다. – fedorqui

+0

@fedorqui 좋은 지적. 나는 편집했다. –