Votre commande,
check=grep -ci 'text' file.sh
sera interprété par le shell comme "exécutez la commande -ciavec les arguments textet file.sh, et définissez la variable checksur la valeur grepdans 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 checkvariable:
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 grepde 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.