Twoje rozkaz
check=grep -ci 'text' file.sh
będą interpretowane przez powłokę jako „uruchom polecenie -ci
z argumentami text
i file.sh
i ustaw zmienną check
na wartość grep
w jej środowisku”.
Powłoka przechowuje w zmiennej wartość wyjściową ostatnio wykonanego polecenia ?
. Możesz przypisać jego wartość do jednej ze swoich zmiennych, takich jak to:
grep -i 'PATTERN' file
check=$?
Jeśli chcesz zastosować tę wartość, możesz albo użyć swojej check
zmiennej:
if [ "$check" -eq 0 ]; then
# do things for success
else
# do other things for failure
fi
lub możesz pominąć użycie oddzielnej zmiennej i konieczność sprawdzenia $?
wszystkich razem:
if grep -q -i 'pattern' file; then
# do things (pattern was found)
else
# do other things (pattern was not found)
fi
(zwróć uwagę -q
, że instruuje, grep
aby niczego nie wysyłać i wychodzić, gdy tylko coś się dopasuje; tak naprawdę nie jesteśmy zainteresowani tym, co pasuje tutaj)
Lub, jeśli chcesz po prostu „robić rzeczy”, gdy wzór nie zostanie znaleziony:
if ! grep -q -i 'pattern' file; then
# do things (pattern was not found)
fi
Zapisywanie $?
w innej zmiennej jest zawsze potrzebne tylko wtedy, gdy trzeba jej użyć później, gdy wartość w $?
została zastąpiona, jak w
mkdir "$dir"
err=$?
if [ "$err" -ne 0 ] && [ ! -d "$dir" ]; then
printf 'Error creating %s (error code %d)\n' "$dir" "$err" >&2
exit "$err"
fi
W powyższym fragmencie kodu $?
zostanie zastąpiony wynikiem [ "$err" -ne 0 ] && [ ! -d "$dir" ]
testu. Zapisanie go tutaj jest naprawdę konieczne tylko wtedy, gdy musimy go wyświetlić i używać z exit
.
$?
zaraz po zakończeniu komendy.