Twoje rozkaz
check=grep -ci 'text' file.sh
będą interpretowane przez powłokę jako „uruchom polecenie -ciz argumentami texti file.shi ustaw zmienną checkna wartość grepw 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 checkzmiennej:
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, grepaby 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.