Où est-ce que je vais mal?
J'ai des fichiers comme suit: p> i passe tau code>, xhpl , FFT code>, MPI_TILE_IO code> et PMB_MPI code> comme paramètres positionnels sur le script comme suit: p> point=$1 #initially points to first parameter
i="0"
while [$i -le 4]
do
grep "$str" ${filename}${point}.txt
i=$[$i+1]
point=$i #increment count to point to next positional parameter
done
5 Réponses :
Configurez votre boucle comme celle-ci. Avec cette syntaxe, la boucle itère sur les paramètres de position, en attribuant à chacun à "point" à tour de rôle.
for point; do
grep "$str" ${filename}${point}.txt
done
Je suggère des citations autour de l'argument du nom de fichier pour éviter les problèmes avec des espaces.
Aaron, bon point. Je copie / collé cette ligne de la question sans le modifier. Dennis, ce n'est pas correct. Il n'y a pas besoin d'attribuer directement au point. Voir la section "Commandes composées" du manuel Bash pour tous les détails.
Essayez quelque chose comme ceci:
# Iterating through the provided arguments
for ARG in $*; do
if [ -f filename_$ARG.txt]; then
grep "$str" filename_$ARG.txt
fi
done
args=$@;args=${args// /,}
grep "foo" $(eval echo file{$args})
Il y a plus d'une façon de le faire et, alors que j'utiliserais aussi, si vous souhaitez que le dernier param: shift code>, voici une autre pour la variété. Il utilise la fonctionnalité d'indirection de Bash: $ {! #} Code> p> p>
Belle addition dénnis - juste ce dont j'ai besoin maintenant
Bash Script .. désolé j'ai oublié de le mentionner
N'oubliez pas de mettre des choses comme ça dans les tags, cela facilitera la question de trouver pour votre public cible, c'est-à-dire. Les personnes qui ont filtré des scripts Bash comme une étiquette intéressante.
Veuillez garder le code formaté comme code b> - ce sera beaucoup plus facile à comprendre.