Вы можете использовать awk -F= '$1=="minlen" {print $2}' /etc/security/pwquality.conf
, чтобы получить минимальную длину в виде простого числа. -F=
говорит awk
разделить строки на символе "=", и скрипт проверяет, является ли поле № 1 (что перед "=") "minlen", и если да, то печатает поле № 2 (что после"=").
Есть еще несколько вещей, за которыми нужно следить;во-первых, minlen не может быть определен, поэтому вам нужно проверить это. Вы можете хотите проверить наличие нескольких определений. Кроме того, при сравнении чисел в bash проще всего использовать (( ))
вместо [[ ]]
. И я рекомендую использовать $( )
вместо кавычек.
Примерно так:
passminlen=$(awk -F= '$1=="minlen" {print $2}' /etc/security/pwquality.conf)
if [[ -z "$passminlen" ]]
then # Minimum length is not defined
isVulnerable="yes"
elif [[ "$passminlen" = *$'\n'* ]]
then # Minimum length is multiply defined; this is weird
isVulnerable="yes"
elif (( $passminlen" >= 10 ))
then
isVulnerable="no"
else
isVulnerable="Yes"
fi