Используемый это обходное решение для решения моей проблемы...
/bin/grep "pam_tally2.so" /etc/pam.d/system-auth
if [ "$?" -eq "0" ]; then
#looks for line existence (pam_tally2.so) and delete it (if present)
/usr/bin/perl -i -pe 'chomp,$_.="" if /account\s.*required\s.*pam_tally2.so/' /etc/pam.d/system-auth
/usr/bin/find /etc/pam.d/system-auth.bkp | /usr/bin/xargs perl -pi -e 's/account\s*required\s*pam_tally2.so//'
#inserts the -deleted- line underneath pam_unix.so line, as desired. Creating a 'moving line' result.
/usr/bin/perl -i -pe 'chomp,$_.="\n" if /account\s.*required\s.*pam_unix.so/' /etc/pam.d/system-auth
/usr/bin/perl -i -pe 'chomp,$_.="\naccount required pam_tally2.so\n" if /account\s.*required\s.*pam_unix.so/' /etc/pam.d/system-auth
fi
Назначения должны быть одним словом, вы не можете ставить пробелы вокруг знака равенства: [1173912]recval = $?[1173913] выполняет команду [1173914]recval[1173915] с двумя аргументами, [1173916]=[1173917] и значением [1173918]$?[1173919].
После команды [1173920]$? [1173921], значение [1173922]$?[1173923] предназначено для команды [1173924]echo[1173925]; сохранение [1173926]$?[1173927] в другую переменную должно быть первым делом. Чтобы увидеть, что делает скрипт оболочки, заставьте его распечатать трассу: добавьте набор [1173928]-x[1173929] сверху, чуть ниже строки [1173930]#![1173931].
Сообщения об ошибках идут на стандартную ошибку (файловый дескриптор 2), а не на стандартный вывод.
Если awk не удается, то ваш скрипт, вероятно, должен вернуть ненулевой статус, а также.