Votre commande,
check=grep -ci 'text' file.sh
sera interprété par le shell comme "exécutez la commande -ci
avec les arguments text
et file.sh
, et définissez la variable check
sur la valeur grep
dans son environnement".
Le shell stocke la valeur de sortie de la dernière commande exécutée dans la variable ?
. Vous pouvez affecter sa valeur à l'une de vos propres variables comme ceci:
grep -i 'PATTERN' file
check=$?
Si vous souhaitez agir sur cette valeur, vous pouvez soit utiliser votre check
variable:
if [ "$check" -eq 0 ]; then
# do things for success
else
# do other things for failure
fi
ou vous pouvez sauter en utilisant une variable distincte et avoir à inspecter $?
tous ensemble:
if grep -q -i 'pattern' file; then
# do things (pattern was found)
else
# do other things (pattern was not found)
fi
(notez le -q
, il indique grep
de ne rien produire et de sortir dès que quelque chose correspond; nous ne sommes pas vraiment intéressés par ce qui correspond ici)
Ou, si vous voulez simplement "faire des choses" lorsque le motif n'est pas trouvé:
if ! grep -q -i 'pattern' file; then
# do things (pattern was not found)
fi
L'enregistrement $?
dans une autre variable n'est nécessaire que si vous devez l'utiliser plus tard, lorsque la valeur de $?
a été remplacée, comme dans
mkdir "$dir"
err=$?
if [ "$err" -ne 0 ] && [ ! -d "$dir" ]; then
printf 'Error creating %s (error code %d)\n' "$dir" "$err" >&2
exit "$err"
fi
Dans l'extrait de code ci-dessus, $?
sera remplacé par le résultat du [ "$err" -ne 0 ] && [ ! -d "$dir" ]
test. L'enregistrer ici n'est vraiment nécessaire que si nous devons l'afficher et l'utiliser avec exit
.
$?
juste après la fin de la commande.