Vous devez read string1, que dois-je faire? Voici mon code:
#!/bin/sh
echo "Enter your sting: "
read read string1
if [ grep -q $string1 file.txt ];then
echo "Found it"
else
echo "Sorry this string not in file"
fi
exit 0
read
est incorrecte, elle doit être read string1
(et vous devez utiliser -r
pour éviter que read
ne répercute pas les barres obliques inverses: read -r string1
);if grep -q $string1 file.txt
puisque vous n'évaluez pas la sortie de grep
mais plutôt sa valeur de retour;-F
à grep
pour l'empêcher d'interpréter les métacaractères d'expression régulière comme tels: if grep -qF $string1 file.txt
$string1
pour éviter une expansion potentielle du nom de fichier et/ou une division de Word: if grep -qF "$string" file.txt
Autres notes:
exit 0
à la fin est redondant et n'est pas vraiment nécessaire, car si le script parvient à atteindre ce point sans erreur, il retourne 0
de toute façon;Donc, le script corrigé selon ce qui précède serait:
#!/bin/sh
echo "Enter your sting: "
read string1
if grep -qF "$string1" file.txt;then
echo "Found it"
else
echo "Sorry this string not in file"
fi
Je pense qu'il est toujours préférable de stocker le résultat, le nombre de correspondances dans ce cas, dans une variable.
Cela dit, vous avez 2 choix, utilisez grep -c
pour compter les lignes correspondantes.
count=$(grep -c "$string1" file.txt)
Ou dirigez les lignes correspondantes vers wc
à partir de grep -o
(--only-match)
count=$(grep -o "$string1" file.txt | wc -l)
Ce sera le script complet avec la deuxième option
#!/bin/sh
echo "Enter your string: "
read string1
count=$(grep -o "$string1" file.txt | wc -l)
if [ $count != 0 ];then
echo "Found it ($count times)"
else
echo "Sorry this string not in file"
fi
exit 0
En outre, vous avez écrit read
deux fois.