Dans le cadre de ce script, je dois pouvoir vérifier si le premier argument donné correspond au premier mot du fichier. Si c'est le cas, quittez avec un message d'erreur; si ce n'est pas le cas, ajoutez les arguments au fichier. Je comprends comment écrire le if
déclaration, mais pas comment utiliser grep
au sein d'un script. Je comprends que grep
ressemblera à ceci
grep ^$1 schemas.txt
J'ai l'impression que cela devrait être beaucoup plus facile que je ne le fais.
J'obtiens une erreur "trop d'arguments" sur le if
déclaration. Je me suis débarrassé de l'espace entre grep -q
et a ensuite obtenu un opérateur binaire d'erreur attendu.
if [ grep -q ^$1 schemas.txt ]
then
echo "Schema already exists. Please try again"
exit 1
else
echo "[email protected]" >> schemas.txt
fi
Réponse acceptée :
grep
renvoie un code de sortie différent s'il a trouvé quelque chose (zéro) et s'il n'a rien trouvé (non nul). Dans un if
, un code de sortie nul est mappé sur "true" et un code de sortie différent de zéro est mappé sur false. De plus, grep a un -q
argument pour ne pas afficher le texte correspondant (mais uniquement renvoyer le code d'état de sortie)
Ainsi, vous pouvez utiliser grep comme ceci :
if grep -q PATTERN file.txt; then
echo found
else
echo not found
fi
En guise de note rapide, lorsque vous faites quelque chose comme if [ -z "$var" ]…
, il s'avère que [
est en fait une commande que vous exécutez, tout comme grep. Sur mon système, c'est /usr/bin/[
. (Eh bien, techniquement, votre shell l'a probablement intégré, mais c'est une optimisation. Il se comporte comme s'il s'agissait d'une commande). Cela fonctionne de la même manière, [
renvoie un code de sortie nul pour vrai, un code de sortie différent de zéro pour faux. (test
est la même chose que [
, sauf pour la fermeture ]
)