Tenter de grep les parameters de position

#! /bin/bash sum=0 for number in $@ do sum=$(( sum + number )) done grep [!0-9+-] "$@" | echo $sum 

Le script est destiné à prendre les parameters de position et à les append ensemble, mais j’ai aussi besoin du script pour effectuer deux opérations supplémentaires.

  1. Si un paramètre de position est un mot, imprimez le mot sur le STDOUT
  2. S’il existe un paramètre de position qui n’est pas un nombre, imprimez un message d’erreur.

Lorsque je lance ce script, grep recherche dans mon répertoire actuel tout autre répertoire ou fichier pour les expressions que je saisis. J’ai besoin de grep pour rechercher les parameters de position des mots, puis les produire dans la sortie standard. Actuellement, la sortie est uniquement la sum des arguments et elle ne reconnaît ni ne produit aucun message lorsque des lettres sont utilisées.

C’est là que j’allais suggérer votre ajustement. Je suppose que vous utilisez des arguments dans votre fichier puisque vous utilisez $ @ … Vous devrez également utiliser -E pour les recherches d’expressions régulières.

 #!/bin/bash sum=0 homeworkassignment=1 wordfound=false for number in $@ do evaluate=$(echo "$number" | grep [!0-9+-]) #check for numbers in $@ if [ $? = '0' ]; then numericvalue=$(echo $number | grep [!0-9+-]) sum=$(( $sum + $numericvalue )) else if [ $homeworkassignment=1 ]; then echo "NO NUMBER"; fi if [ $homeworkassignment=2 ]; then wordfound=true; fi fi done echo "The Total Sum is "$sum if ([ $homeworkcode -eq 2] && [ $wordfound -eq "true" ] ); then echo "A Word was Found"'!';fi 

Sortie:

 [root@localhost ~]# ./so_38517168.sh 2 1 2 3 4 NO NUMBERS 1 NO NUMBERS 2 NO NUMBERS 3 NO NUMBERS 4 NO NUMBERS NO NUMBERS NO NUMBERS NO NUMBERS NO NUMBERS NO NUMBERS NO NUMBERS NO NUMBERS 2 1 2 3 4 NO NUMBERS 1 NO NUMBERS 2 NO NUMBERS 3 NO NUMBERS 4 The Total Sum is 22 

Notant que la ligne qui a extrait 2 1 2 3 4 NO NUMBERS 1 NO NUMBERS 2 NO NUMBERS 3 NO NUMBERS 4 est parce que la ligne entière correspondait à un nombre. Vous devrez probablement utiliser sed pour afficher uniquement les chiffres de cette sortie.