Как скопировать или считать возвращаемое значение (статус выхода) из сценария AWK в сценарий оболочки (удар), который будет использоваться в если оператор для сравнения

Используемый это обходное решение для решения моей проблемы...

/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
2
20.05.2014, 16:12
3 ответа
[1133489]Это должно сработать:[12120]Проблема в вашем сценарии заключалась в использовании [1133866]echo $?[1133867] до [1133868]recval = $?[1133869]. С помощью [1133870]echo $?[1133871] вы распечатали значение [1133872]$?[1133873] (статус выхода последнего утверждения), [1133874], но [1133875] тогда [1133876]$?[1133877] было переписано из [1133878]echo $?[1133879]. Статус выхода последнего утверждения тогда был статусом выхода [1133880]echo $?[1133881], с вероятностью 0.[1133492].
3
27.01.2020, 22:00
[1173129]Ваша основная логика верна, но синтаксис оболочки неверен.

Назначения должны быть одним словом, вы не можете ставить пробелы вокруг знака равенства: [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'[1173933] - это двухсимвольная строка. Для числа 2 запишите [1173934]2[1173935]. Но чтобы проверить, была ли ошибка, проверьте, ненулевое ли это значение: 2 - это только одно из возможных значений.

Есть несколько способов сравнить целые числа, но то, что вы написали, не одно. [1173936] [1173962] [1173976]["$x" -eq "$y" ] [1173977] (переносной) [1173963] [1173964][1173978][[ $x -eq $y ]][1173979] (только в ksh, bash, zsh, но не в [1173980]/bin/sh[1173981])

((x == y))[1173983] (в ksh93, bash, zsh только, но не в [1173984]/bin/sh[1173985])

Сообщения об ошибках идут на стандартную ошибку (файловый дескриптор 2), а не на стандартный вывод.

Если awk не удается, то ваш скрипт, вероятно, должен вернуть ненулевой статус, а также.

Вот исправленный скрипт:

1
27.01.2020, 22:00
[1133493] $? [1133882] $? [1133883] содержит значение кода выхода самой последней выполненной команды [1133884] [1133885]. Коды выхода также можно суммировать в операторе случая.[12121]
0
27.01.2020, 22:00

Теги

Похожие вопросы