我正在检查这一行ocredit的密码复杂性:/etc/pam.d/password-auth
password requisite pam_pwquality.so try_first_pass retry=3 minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=1 gecoscheck=1
Run Code Online (Sandbox Code Playgroud)
我想 grep ocredit 值“1”并将其设置为变量,比方说check_ocredit。
我的脚本将检查,如果 ocredit 值不为 0,则它将返回“true”,否则,它将显示 中设置的当前值是什么/etc/pam.d/password-auth。
这是我要实现的逻辑:
if [[ $check_ocredit -ne "0" ]]
then
true
else
echo "Current ocredit value is : $check_ocredit"
fi
Run Code Online (Sandbox Code Playgroud)
输出将如下所示:
Current ocredit value is : 1
Run Code Online (Sandbox Code Playgroud)
我尝试:
grep ocredit /etc/pam.d/password-auth | awk '{print $10}' | awk -F "=" '{print $2}'
Run Code Online (Sandbox Code Playgroud)
但我在想,如果 ocredit 丢失了,或者它不在第 10 位怎么办……所以我的结果会是错误的。有人可以就此给我建议吗?
您可以使用“仅打印该行的匹配部分”的单个grep命令来完成此操作,这给了我们:“忽略与此处匹配的任何内容”:-o-P\K
$ grep -oP 'ocredit=\K\d+' /etc/pam.d/password-auth
1
Run Code Online (Sandbox Code Playgroud)
因此,在您的脚本中,您可以执行以下操作:
check_ocredit=$(grep -oP 'ocredit=\K\d+' /etc/pam.d/password-auth)
if [[ "$check_ocredit" -ne "0" ]]
then
echo "Current ocredit value is : $check_ocredit"
fi
Run Code Online (Sandbox Code Playgroud)
您的版本if只会在值为 0 时打印该值。