GNU/Linux >> Tutoriels Linux >  >> Linux

Grep peut-il renvoyer vrai/faux ou existe-t-il des méthodes alternatives ?

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 ] )


Linux
  1. Que sont les codes de sortie Bash sous Linux

  2. Comment puis-je exclure des répertoires de grep -R ?

  3. exit() peut-il échouer à terminer le processus ?

  4. Pourquoi quitter le code 141 avec grep -q ?

  5. valeur de retour du script python au script shell

Linux – Pourquoi le vrai et le faux sont-ils si grands ?

Grep est-il lent à sortir après avoir trouvé une correspondance ?

Existe-t-il une alternative open source au paysage ?

Existe-t-il une alternative à JTS TestBuilder sous Linux ?

Pourquoi le vrai et le faux sont-ils si grands ?

Comment savoir s'il y a des fichiers dans un dossier et quitter en conséquence (en KSH)