2010-08-25 7 views
0

la syntaxe de test suivant fait partie du script kshscript shell + mot de correspondance en ligne sans utiliser l'écho

[[ $PARAM = TRUE ]] && [[ ` echo $LINE_FROM_FILE | grep -c Validation ` -eq 1 ]] && print "find Validation word" 

Puis-je obtenir une autre syntaxe créative/solution/commande pour vérifier si le mot de validation existe dans LINE_FROM_FILE sans pour autant utiliser la commande echo?

LINE_FROM_FILE = "123 Validation V125 tcp IP = 1.2.56.4"

remarque: doit correspondre exactement à mot de validation

Lidia

Répondre

0

Vous pouvez utiliser Parameter expansion qui supprime tout jusqu'à et y compris Validation et comparez cela à l'expansion normale du paramètre. Si elles ne sont pas égales, le paramètre contient Validation.

[[ "${LINE_FROM_FILE##* Validation }" != "${LINE_FROM_FILE}" ]] 

(Comme il y a toujours des espaces avant et après validation peuvent être inclus dans le modèle. Je ne sais pas d'une autre façon de faire correspondre début et à la fin du mot dans les motifs shell)

+0

# LINE_FROM_FILE = "1 2 3 ValidationWORD" # [["$ {LINE_FROM_FILE ## * Validation}"! = "$ {LINE_FROM_FILE}" ]] && imprimer OK OK – lidia

+0

essayez avec LINE_FROM_FILE = "1 2 3 ValidationWORD", alors vous voyez qu'il s également correspondre - :( – lidia

+0

Votre version 'grep' correspondrait également à cette ligne. Ce que j'ai fait était de reproduire ce que cette version a fait. –

0

Vous pouvez le faire en utilisant case:

case $LINE_FROM_FILE in 
    *Validation*) 
     echo "found word Validation" 
     ;; 
    *) 
     echo "did not find word Validation" 
     ;; 
esac 
+0

Je ne peux pas utiliser le cas voir ma nouvelle édition [[$ PARAM = TRUE]] – lidia

0
[[ $PARAM = TRUE ]] && [[ "$LINE_FROM_FILE" == *Validation* ]] && print "find Validation word"