2014-09-02 3 views
0

Я работаю над Solaris 5.10, и я хотел бы разобрать /etc/default/passwd и проверить минимальную длину пароля. Ниже скрипт я использую:Использование awk в solaris

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 

Если минимальный PASSLENGTH равен 6, я повторяю, как уступчивый в моем report.txt файле. Но проблема в том, что мой код не входит в блок if, даже если значение переменной PASSLENGTH равно 6 в /etc/default/passwd.

+0

Почему awk? Вы получили бы намного больше помощи, если бы вы написали это, скажем, на python. – bmargulies

+0

Запустите команду awk самостоятельно и посмотрите, что такое вывод, вероятно, оба аргумента не совпадают. – 2014-09-02 08:28:31

+2

Solaris! = Linux. вы должны удалить тег linux. – Kent

ответ

2

PASSLENGTH записано в формате PASSLENGTH=N.
В качестве разделителя по умолчанию Awk использует пробел/табуляцию/новую строку.
Это означает, что ваш $1 на самом деле PASSLENGTH=6 и $2 не имеет значения, объясняя, почему инструкция if терпит неудачу.

Попробуйте

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 -F= '$1 == "PASSLENGTH" && $2 != "6" {x=1} END{exit x} 

Все в 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 хорошая точка. Я редактировал – 2014-09-02 09:10:19

Смежные вопросы