У меня есть скрипт bash со следующим:
#!/bin/bash -e
egrep "^username" /etc/passwd >/dev/null
if[ $? -eq 0 ]
then
echo "doesn't exist"
fi
Этот скрипт не будет работать без -e. Что делает -e
для этого сценария? Кроме того, что делает $?
в этом контексте?
-e
на странице руководства (я действительно хочу увидеть ответ на этот адрес).$?
содержит последний код выхода (кодegrep
процесса , созданного выше).-e
задокументировано подset
.if egrep -q "^username" /etc/passwd ; then echo "doesn't exist" ; fi
if
и[
. Этот сценарий не будет работать с-e
, потому что , еслиgrep
ничего не находит , то под-e
сценарий будет прекратить прямо там. Без-e
, вы получите сообщение в обратном направлении: статус ($?
) 0 означает, что grep действительно нашел пользователя. Обратите внимание, что это должно быть `grep '^ username:', кстати (что, если есть другой пользователь с более длинным именем?).#/bin/bash -e
иметь тот же эффект, что и#/bin/bash
в строке № 1 иset -e
в строке № 2?Ответы:
Ошибка выхода. Больше флагов
Если есть ошибка, она сразу выйдет.
$? это выход из предыдущей команды. В Linux состояние выхода 0 означает, что команда была успешной. Любой другой статус будет означать, что произошла ошибка.
egrep "^ username" / etc / passwd> / dev / null Будет искать имя пользователя в файле / etc / passwd. Если он найдет его, то будет завершен статус $? будет равно 0. Если он не найдет его, статус выхода будет чем-то другим (не 0), следовательно, вы будете "эхо не существует".
источник
if egrep "^username" /etc/passwd >/dev/null
.set
требуется, хотя? : - /-e
для bash задан аргумент командной строки. Все опции, перечисленные нижеset
, также принимаются bash в командной строке - обратите внимание на первое предложение в разделе Опции страницы руководства.Все ключи командной строки bash описаны в
man bash
.источник
set
требуется, хотя? : - /Ваш скрипт неверен, потому что
статус выхода 0 - значит - все ок, в случае с grep значит "ОК, найдена строка". состояние выхода! = 0 означает, что что-то не так, в случае с grep 1 означает «не найден», 2 означает «невозможно открыть ввод» ...
источник