export $ someVariable = valeur
Les fichiers sont disponibles dans tous les terminaux après source; À cette fin, les variables environnementales sont stockées à l'intérieur des fichiers bash.
Supposons que l'utilisateur doit utiliser ou modifier les variables environnementales à l'aide de la commande SED. Dans ce cas, les utilisateurs ne peuvent pas utiliser la commande comme mentionné ci-dessus pour cela. Différentes fonctions et méthodes doivent être utilisées pour la commande SED. Dans cet article, nous verrons de telles méthodes, qui sont les suivantes.
Dans la ligne de commande Linux, SED est un puissant outil de traitement. En utilisant des doublures compacts SED, les utilisateurs effectuent souvent un remplacement de texte, ce qui est assez pratique. Lorsque les utilisateurs remplacent SED par des variables de shell, il a également des inconvénients.
Comment utiliser les variables d'environnement dans la commande SED
Ayons un exemple, nous avons ici un fichier nommé test.SMS.
test de chat.SMS
Current_time = # Remplissez le
Date et heure actuelles
Java_home = # Remplissez le
Chemin java_home
Nous rédigerons un script shell pour remplir le chemin Java_Home et l'heure actuelle dans le système actuel ci-dessus donné. Ce processus est facile, mais il y a des problèmes qui sont possibles. Ici, nous allons écrire un script en utilisant GNU SED.
Comme nous l'avons mentionné ci-dessus, ici, nous remplacerons le chemin Java_Home et l'heure actuelle. Pour cela, nous allons d'abord remplir l'heure actuelle aux bons endroits ici. Nous pouvons utiliser la commande Date pour obtenir l'heure actuelle.
solution de chat.shot
#!/ bac / sh
My_date = $ (date)
sed -i -r 's / ^ (current_time =).* / \ 1 $ my_date / 'Test.SMS
Le script écrit ci-dessus n'est pas trop difficile à comprendre. En substituant d'abord la commande dans une variable my_date, obtenez l'heure et la date actuelle et enregistrez-la.
Après avoir obtenu les données en utilisant la substitution SED, l'utilisateur les remplit dans le fichier. Nous avons utilisé l'option -i de la commande GNU SED pour effectuer l'édition sur place.
Maintenant, nous allons vérifier et exécuter notre script.
$ ./solution.shot
$ test de chat.SMS
Current_time = $ my_date
Java_home = # Remplissez le chemin Java_Home
Nous voyons dans la sortie que la ligne avec «current_time =» a été remplacée. Cependant, le littéral «$ my_date» est rempli au lieu de l'heure et de la date actuelle.
La raison pour laquelle les variables de coquille ne sont pas étendues dans des devis uniques est que nous avons utilisé des devis uniques sous la commande SED.
Les doubles guillemets sont utilisés dans la commande SED pour permettre une extension de variable de coque à correction rapide.
$ solution de chat.shot
#!/ bac / sh
My_date = $ (date)
sed -i -r "s / ^ (current_time =).* / \ 1 $ my_date / "Test.SMS
Maintenant, nous allons tester la solution.Script à nouveau.
$ ./solution.shot
$ test de chat.SMS
Current_time = mer 27 janvier 10:02:05 PM CET 2021
Java_home = # Remplissez le chemin Java_Home
Après avoir rempli l'heure et la date aux bons endroits, le chemin Java_Home est rempli.
Nous voyons quel délimiteur nous devons utiliser en ajoutant une autre commande SED à notre solution.script.
$ solution de chat.shot
…
sed -i -r "s / ^ (current_time =).* / \ 1 $ my_date / "Test.SMS
sed -i -r "s / ^ (java_home =).* / \ 1 $ java_home / "Test.SMS
Vérification du script ci-dessus.
$ ./solution.shot
SED: -E Expression # 1, char 24: Option inconnue à «s»
Nous voyons que la nouvelle commande SED qui a été ajoutée ne fonctionne pas. Si nous le testons pour la deuxième fois, nous voyons que seule sa variable est différente, mais travailler est la même que la commande SED. Pour résoudre ce problème, nous devons prendre les mesures suivantes:
Le délimiteur n'existe pas dans la variable
Pour bien le savoir, les utilisateurs doivent d'abord comprendre ce que la variable d'environnement $ java_home contient.
$ echo $ java_home
/ usr / lib / jvm / par défaut
Nous pouvons voir que ces variables de coquille sont élargies dans les doubles-quottes. Donc, notre deuxième commande SED vient après l'expansion variable.
sed -i -r "s / ^ (java_home =).* / \ 1 / usr / lib / jvm / default / "Test.SMS
Les barres obliques (/) dans la valeur de la variable interfèrent avec la commande «s» (s / motif / remplacement /), c'est pourquoi la commande SED ci-dessus ne fonctionne pas. De cette façon, nous pouvons sélectionner d'autres caractères comme délimiteurs de la commande «S».
Les utilisateurs peuvent légèrement modifier la deuxième commande SED pour résoudre ce problème en utilisant '#' comme délimiteur de la commande s.
sed -i -r "s # ^ (java_home =).* # \ 1 $ java_home # "Test.SMS
Maintenant, nous testons le script ci-dessus.
$ ./solution.shot
$ test de chat.SMS
Current_time = mer 27 janvier 10:36:57 PM CET 2021
Java_home = / usr / lib / jvm / par défaut
Solution 2
solution.Sh fonctionne dans la plupart des cas. De plus, nous voyons que '#' dans les noms de fichiers est un caractère valide sur la plupart des * systèmes de fichiers Nix. Si nous exécutons notre script sur java_home sur un système défini sur / opt / # jvm #, le script de l'utilisateur échoue à nouveau. Nous ferons le travail suivant pour que notre script fonctionne dans tous les cas
Les utilisateurs peuvent utiliser la substitution de bash pour échapper au délimiteur. Par exemple, l'utilisateur peut échapper à tous les caractères '#' en variable $ var.
$ Var = "foo # bar # blah"
$ echo "$ var // # / \\ #"
foo \ #bar \ #blah
Maintenant, nous appliquerons notre script ici.
$ solution de chat.shot
#!/ bac / sh
My_date = $ (date)
sed -i -r "s / ^ (current_time =).* / \ 1 $ my_date / "Test.SMS
sed -i -r "s # ^ (java_home =).* # \ 1 $ java_home // # / \\ # # "Test.SMS
Nous allons tester en exécutant notre script avec la variable Java_Home parasite pour voir si cela fonctionne comme prévu.
$ Java_home = / opt / # /: / @ / - / _ / $ / jvm ./solution.shot
$ test de chat.SMS
Current_time = jeu 28 janvier 11:23:07 AM CET 2021
Java_home = / opt / # /: / @ / - / _ / $ / jvm
Nous concluons que notre script fonctionne même si nous avons de nombreux caractères spéciaux dans notre variable Java_Home.
Conclusion
Dans cet article, nous avons vu comment utiliser les variables environnementales avec la commande SED. Ils font également de nombreuses erreurs qu'ils causent, que nous avons également mentionnées dans cet article et leur réparation. Nous espérons qu'à partir de cet article, vous obtiendrez les connaissances complètes dont vous avez besoin.