Dans cet article, j'écrirai sur les parties que je n'ai pas comprises en essayant d'utiliser l'instruction for (en particulier sur la façon d'utiliser les variables).
Forme de base de la déclaration for
pour variable dans la liste de valeurs
do
En traitement
done
Il existe les manières suivantes d'utiliser l'instruction for sous Linux.
Créez un fichier avec un éditeur approprié (tel que le Bloc-notes) (extend **. Sh **), écrivez une instruction for dans le formulaire ci-dessus et lisez-la sous Linux. Écrivez les caractères «#! / Bin / bash» sur la première ligne du fichier.
Faites avec le bloc-notes, etc. (hoge.sh)
#!/bin/bash
for i in 1 2 3
do
echo $i ##1 2 3 est affiché à l'écran
done
Pour charger le fichier créé (script shell), tapez simplement ** nom de fichier ** sur l'écran Linux. Cependant, puisque vous devez spécifier le chemin du fichier, utilisez "**. / Nom du fichier " (. ** fait référence au ** répertoire courant *). ( Placer le fichier créé dans le répertoire courant à l'avance)
Résultat de sortie
$ ./hoge.sh
1
2
3
Vous pouvez également copier et coller le contenu écrit dans le bloc-notes comme ci-dessus sur l'écran Linux.
Dans ce cas, la marque >
est automatiquement ajoutée à chaque saut de ligne.
Commande et résultat de sortie
$ for i in 1 2 3
> do
> echo $i
> done
1
2
3
Au lieu de changer de ligne, vous pouvez également écrire sur une seule ligne en ajoutant ;
à ** pour la ligne ** et ** avant ** terminé **.
Commande et résultat de sortie
$ for i in 1 2 3; do echo $i; done
1
2
3
Référence: Bash sur la ligne de commande sur une ligne (pour instruction / instruction if)
Dans l'explication suivante, nous utiliserons l'instruction for par la méthode ** 2 **.
C'est fondamentalement la même chose que l'utilisation de variables dans les scripts shell. Si vous recherchez "** variables de script shell **", il existe de nombreux sites, alors n'hésitez pas à les consulter!
・ Introduction des commandes de base pour les scripts shell pour les débutants ・ Résumé des connaissances de base du script shell
Je voudrais expliquer brièvement certains cas.
La valeur de la ** variable ʻi** peut être utilisée dans **
$ i` **. (Voir l'exemple ci-dessus)
Si ** $ i
** et la chaîne sont consécutives, elle doit être $ {i}
.
$ for i in 1 2 3
> do
> echo $ixxx
> echo ${i}xxx
> done
## "ixxx"N'existe pas, donc rien n'est produit.
1xxx ## "Valeur de la variable i(=1)" + "xxx"Est sortie.
2xxx
3xxx
Double citation"" ...Lire le contenu de la variable (ex. "$i" -> 1)
Simple citation'' ...Afficher la chaîne de caractères telle quelle (ex. '$i' -> $je)
Retour citation`` ...Lire comme une commande (ex. `cat test.txt` -> test.Sortie du contenu de txt)
Sous Linux, il y a une différence entre `` '' " "
comme ci-dessus, alors assurez-vous d'utiliser ** " "
** lorsque vous mettez des variables entre guillemets **.
$ cat test01.txt
1xxxxxxxxxx
xxx2xxxxxxx
xxxxx3xxxxx
xxxxxxxx4xx
xxxxxxxxxx5
##Extraire uniquement les lignes contenant 1 4 5
$ for i in 1 4 5
> do
> cat test01.txt | grep "$i"
> done
1xxxxxxxxxx
xxxxxxxx4xx
xxxxxxxxxx5
## $Extraire les lignes contenant la chaîne i (pas de sortie)
$ for i in 1 4 5
> do
> cat test01.txt | grep '$i'
> done
Référence: [bash] Différence entre "" "," \ '"et" `" -Plutôt école de riz
Une liste approximative ressemble à ceci (je pense qu'il y en a beaucoup d'autres).
##Déplacer i de 1 2 3 4 5
for i in 1 2 3 4 5
for i in {1..5}
for i in `seq 1 5`
for i in `seq 5`
for ((i=1; i<=5; i++))
##Déplacer i de 2( 1 3 5 7 9 )
for ((i=1; i<=10; i=i+2)) ## (Première valeur;je conditionne;Comment augmenter i(ou comment réduire))
for ((i=1; i<=10; i+=2))
##Remplacez i par une lettre
for i in aa bb cc
##Lisez chaque ligne du fichier(Notez que la boucle sera séparée même si elle est vide.;Voir ci-dessous)
for i in `cat test.txt`
##Spécifiez un fichier dans le répertoire
for i in *.txt
for i in `ls`
Référence: [For] Command (Application Part 2) -Repeat processing in combination with the command execution result [For] Command (Application Part 3) - Répéter le traitement en spécifiant le nombre de fois
Il semble que la méthode de lecture avec l'instruction while
soit plus importante que l'instruction for (→ [Se référer au post-scriptum](# Note supplémentaire)).
Il existe plusieurs modèles, mais sachez que si la dernière ligne du fichier à lire n'a pas de saut de ligne, seule la dernière ligne peut ne pas être lue selon la méthode.
Référence: [Le copier-coller est possible | Traiter par ligne avec bash / while read line: 5 modèles](https://lanchesters.site/bash- while-read-line/) Solution pour BASH lors de la lecture ne traitant pas la dernière ligne
D'après ce que j'ai étudié, la méthode de transmission du document ici (la méthode ci-dessous) peut éviter le problème, donc je pense personnellement que cette méthode est bonne.
$ cat test02.txt
1
2
3
4
5 ##Aucun saut de ligne
##Dernière ligne non lue
$ cat test02.txt | while read line
> do
> echo line : $line
> done
line : 1
line : 2
line : 3
line : 4
##Lisez jusqu'à la dernière ligne
$ while read line
> do
> echo line : $line
> done << Hear
> `cat test02.txt`
> Hear
line : 1
line : 2
line : 3
line : 4
line : 5
Comme expliqué dans [Lien ci-dessus](https://lanchesters.site/bash- while-read-line/), dans le cas de l'instruction for, la boucle est séparée non seulement par des sauts de ligne mais aussi par des espaces, donc chaque ligne Si vous souhaitez traiter chacun d'eux, il est plus polyvalent d'utiliser «while read line».
$ cat test02.txt
1 x
2xx
3
4
5
##car est séparé même s'il est vide
$ for i in `cat test02.txt`
> do
> echo line : $i
> done
line : 1
line : x
line : 2xx
line : 3
line : 4
line : 5
##tandis que n'est pas séparé par des blancs
$ while read line
> do
> echo line : $line
> done << Hear
> `cat test02.txt`
> Hear
line : 1 x
line : 2xx
line : 3
line : 4
line : 5
Recommended Posts