2012-02-29 20 views
1

Je suis en train de connaître le nombre d'occurrences de modèle dans un fichier avec le code suivant:Linux Shell Script Numéro illégal

#!/bin/sh 

var='grep -c 'abc' file1' 

if [ "$var" -lt 10 ]; then 
    echo "less than 10" 
fi 

Je reçois l'erreur: Numéro illégal: grep -c abc fichier1

Quelqu'un peut-il aider s'il vous plaît.

Merci.

Répondre

3

Utilisez `(accents graves) au lieu de apostrophes ('):

#!/bin/sh 

var=`grep -c 'abc' file1` 

if [ "$var" -lt 10 ]; then 
    echo "less than 10" 
fi 
1

Vous voulez probablement des guillemets (`) plutôt que des guillemets simples ('). à savoir:

var=`grep -c 'abc' file1` 
1

Vous avez utilisé une citation simple plutôt que d'un backtick si votre variable var est effectivement réglé sur une chaîne de caractères plutôt que le résultat de cette commande. Vous verriez que si vous la première variable Echoed:

pax$ var='grep -c 'abc' file1' 
pax$ echo "[$var]" 
[grep -c abc file1] 

La version backtick serait:

var=`grep -c 'abc' file1` 

Mais je voudrais suggérer à l'aide bash si possible pour les scripts. Vous aurez du mal à trouver une distribution générale qui ne l'a pas par défaut et elle est considérée par certains comme plus puissante que les autres shells. En fait, sur certains systèmes, /bin/shestbash.

Si vous pouvez aller que Rute, la $() construction est généralement une meilleure idée puisque vous pouvez les imbriquer sans douleur:

var=$(grep -c 'abc' file1) 
0

Essayez de publier ce qui suit pour obtenir une meilleure réponse:

  • grep --version
  • bash --version si votre shell est Bash ou laissez-nous savoir quel shell vous utilisez.
  • utilisation grep à l'intérieur de l'arrière-tiques ou comme indiqué ci-dessous
  • [[ est plus polyvalent que dans Bash [.

Enfin, les travaux suivants sur ma machine sans erreur:

#!/bin/bash 
var=$(grep -c "abc" file1) 
if [[ "$var" -lt 10 ]] 
then 
    echo "less than 10" 
fi 

Exécution:

[email protected]:~$ cat file1 
abc 
abcd 
abcde 
abcdef 
[email protected]:~$ 
[email protected]:~$ ./t.sh 
less than 10 
[email protected]:~$