Mam skrypt bash z następującymi elementami:
#!/bin/bash -e
egrep "^username" /etc/passwd >/dev/null
if[ $? -eq 0 ]
then
echo "doesn't exist"
fi
Ten skrypt nie będzie działał bez -e. Co robi -e
ten skrypt? Co również robi $?
w tym kontekście?
-e
na stronie podręcznika (naprawdę chcę zobaczyć odpowiedź na to pytanie).$?
zawiera ostatni kod zakończenia (kodegrep
procesu spawnowanego powyżej).-e
jest udokumentowane podset
.if egrep -q "^username" /etc/passwd ; then echo "doesn't exist" ; fi
if
i[
. Ten skrypt nie działa z-e
, bo jeśligrep
nie znajdzie niczego wtedy pod-e
skryptu zakończy tam. Bez-e
tego wiadomość jest odwrócona: status ($?
) 0 oznacza, że grep znalazł użytkownika. Zauważ, że tak na marginesie powinna to być nazwa użytkownika `grep '^: (a jeśli jest inny użytkownik o dłuższej nazwie?).#/bin/bash -e
miał taki sam efekt jak#/bin/bash
na linii nr 1 iset -e
linii nr 2?Odpowiedzi:
Błąd wyjścia. Więcej flag
Jeśli wystąpi błąd, natychmiast się zakończy.
$? to status wyjścia z poprzedniego polecenia. W systemie Linux status wyjścia równy 0 oznacza, że polecenie zakończyło się powodzeniem. Każdy inny status oznaczałby błąd.
egrep "^ nazwa użytkownika" / etc / passwd> / dev / null Poszukałby nazwy użytkownika w pliku / etc / passwd. Jeśli go znajdzie, to status wyjścia $? będzie równa 0. Jeśli go nie znajdzie, stanem wyjścia będzie coś innego (nie 0), dlatego „echo nie istnieje”.
źródło
if egrep "^username" /etc/passwd >/dev/null
.set
wymagane? : - /-e
podano bash jako argument wiersza poleceń. Wszystkie opcje wymienione poniżejset
są również akceptowane przez bash w wierszu poleceń - zwróć uwagę na pierwsze zdanie w sekcji Opcje strony podręcznika.Wszystkie przełączniki linii poleceń bash są udokumentowane w
man bash
.źródło
set
wymagane? : - /Twój skrypt jest niepoprawny, ponieważ
status wyjścia 0 - średnia - wszystko jest OK, w przypadku grep oznacza „OK, znaleziono ciąg znaków”. status wyjścia! = 0 oznacza, że coś jest nie tak, w przypadku grep 1 oznacza „nie znaleziono”, 2 oznacza „nie można otworzyć wejścia” ...
źródło