Bash Variables spéciales (0 $, $?, $ #, [Protégé par e-mail]</a>, $$, $ *)
- 575
- 3
- Mohamed Brunet
Bash est un shell puissant qui fournit une large gamme de variables spéciales qui peuvent être utilisées pour manipuler et contrôler le comportement des scripts. Ces variables fournissent des informations essentielles sur l'environnement dans lequel le script s'exécute, y compris les arguments en ligne de commande, l'ID de processus actuel et l'état de la dernière commande exécutée.
Dans cet article, nous fournirons un guide approfondi de toutes les variables spéciales bash, y compris des exemples de leur utilisation et des pièges communs à éviter.
- '
0 $
' - Le nom du script en cours d'exécution. - '
1 à 9 $
' - Les neuf premiers arguments en ligne de commandement. - '
$ #
' - Le nombre d'arguments en ligne de commande. - '
$ *
' - Tous les arguments de ligne de commande en tant que chaîne unique. - '
[Protégé par e-mail]
' - Tous les arguments en ligne de commande comme un tableau. - '
$?
' - L'état de sortie de la dernière commande exécutée. - '
$$
' - L'ID de processus du shell actuel. - '
$!
' - L'ID de processus de la dernière commande d'arrière-plan.
Discutons des variables spéciales en détail avec des exemples.
0 $ - le nom du script en cours d'exécution
Bas, 0 $ est un paramètre spécial qui contient le nom du script ou du shell qui est actuellement exécuté. Il est également connu sous le nom de «nom» ou «argument zeroth» du script.
Par exemple, supposons que vous ayez un script appelé «MyScript.sh ” que vous voulez courir à partir de n'importe quel répertoire. Dans ce cas, vous pouvez utiliser la variable de 0 $ pour déterminer le nom du script en cours d'exécution:
#!/ bin / bash echo "Le script en cours d'exécution actuel est: 0 $"12 | #!/ bin / bashecho "Le script en cours d'exécution actuel est: 0 $" |
Vous pouvez également déterminer le répertoire dans lequel le script est situé, puis utiliser ce répertoire pour localiser tous les fichiers dont les besoins du script.
#!/ bin / bash script_dir = "$ (cd" $ (dirname "$ bash_source [0]") "&& pwd)" echo "Le script exécute à partir de $ script_dir"123 | #!/ bin / bashscript_dir = "$ (cd" $ (dirname "$ bash_source [0]") "&& pwd)" echo "Le script exécute à partir de $ script_dir" |
1 $, 2 $,…, 9 $ - Arguments en ligne de commandement
Le 1 $, 2 $,…, 9 $ Les variables contiennent les neuf premiers arguments en ligne de commande transmis au script. Ces variables sont utiles pour créer des scripts shell qui acceptent l'entrée de l'utilisateur.
Par exemple, supposons que vous ayez un script appelé "saluer.sh ” Cela prend un nom comme premier argument de ligne de commande. Dans ce cas, vous pouvez utiliser le 1 $ variable pour récupérer le nom, puis l'utiliser dans la sortie du script.
#!/ bin / bash echo "Bonjour, 1 $!"12 | #!/ bin / bashecho "Bonjour, 1 $!" |
Si un script doit accéder à plus de neuf arguments en ligne de commande, le $ 10, $ 11,…, $ n Les variables peuvent être utilisées pour les récupérer. Ces variables peuvent être utilisées avec la commande Shift pour traiter les arguments en ligne de commande en lots. Assurez-vous que la variable est entourée supports.
$ # - le nombre d'arguments de ligne de commande
Le $ # La variable contient le nombre d'arguments de ligne de commande transmis au script. Cette variable est utile pour créer des scripts shell qui valident l'entrée utilisateur.
Par exemple, supposons que vous ayez un script appelé "valider.shot"Cela nécessite deux arguments en ligne de commande. Dans ce cas, vous pouvez utiliser la variable $ # pour vous assurer que le bon nombre d'arguments est fourni.
#!/ bin / bash si [[$ # -ne 2]] puis écho "Utilisation: valider.sh [nom d'utilisateur] [mot de passe] "sortie 1 fi123456 | #!/ bin / bashif [[$ # -ne 2]] puis écho "Utilisation: valider.sh [username] [mot de passe] "sortir 1fi |
$ * - Tous les arguments en ligne de commande comme une seule chaîne
Le $ * La variable contient tous les arguments de ligne de commande transmis au script en tant que chaîne unique. Cette variable est utile pour créer des scripts shell qui doivent manipuler la chaîne de ligne de commande entière.
Par exemple, supposons que vous ayez un script appelé "rejoindre.sh ” qui rejoint deux chaînes fournies comme arguments en ligne de commandement. Dans ce cas, vous pouvez utiliser le $ * variable pour concaténer les cordes.
#!/ bin / bash joint = "$ *12 | #!/ bin / bashjoined = "$ * |
[Protégé par e-mail] - Tous les arguments en ligne de commande comme un tableau
Le [Protégé par e-mail] La variable contient tous les arguments de ligne de commande transmis au script sous forme de tableau. Cette variable est utile pour créer des scripts shell qui doivent manipuler des arguments de ligne de commande individuels.
Par exemple, supposons que vous ayez un script appelé "liste.sh ” qui répertorie tous les fichiers dans un répertoire fourni comme argument de ligne de commande. Dans ce cas, vous pouvez utiliser le [Protégé par e-mail] variable pour itérer sur chaque nom de répertoire et énumérer les fichiers de ce répertoire.
#!/ bin / bash pour le répertoire dans "$ @" do echo "listing fichiers dans $ Directory:" ls -l $ répertoire fait123456 | #!/ bin / bashfor répertoire dans "[e-mail protégé]" Do echo "listing fichiers dans $ répertoire:" ls -l $ DirectoryDone |
$? - L'état de sortie de la dernière commande exécutée
Le $? La variable contient l'état de sortie de la dernière commande exécutée. Cette variable est utile pour créer des scripts shell qui doivent gérer les erreurs ou prendre différentes actions en fonction du succès ou de l'échec d'une commande.
Par exemple, supposons que vous ayez un script appelé «Créer un fichier.sh ” qui crée un fichier et renvoie un statut de sortie indiquant le succès ou l'échec. Dans ce cas, vous pouvez utiliser le $? variable pour vérifier l'état de sortie et prendre les mesures appropriées.
#!/ bin / bash touche myfile.txt si [[$? -eq 0]] puis écho "Fichier créé avec succès" else echo "Erreur créant le fichier" fi12345678 | #!/ bin / bashtouch myfile.txtif [[$? -eq 0]] puis écho "Fichier créé avec succès" else echo "Erreur créant le fichier" fi |
$$ - L'ID de processus du shell actuel
Le $$ La variable contient l'ID de processus du script actuel. Cette variable est utile pour créer des scripts shell qui doivent gérer plusieurs processus ou créer des noms de fichiers uniques.
Par exemple, supposons que vous ayez un script appelé "enregistrer.sh ” qui enregistre les informations à un fichier avec un nom unique basé sur l'ID de processus. Dans ce cas, vous pouvez utiliser le $$ variable pour générer un nom de fichier unique.
#!/ bin / bash log_file = "log _ $$.txt "echo" Logging pour fichier $ log_file "123 | #!/ bin / bashlog_file = "log _ $$.txt "echo" Logging pour fichier $ log_file " |
$! - L'ID de processus de la dernière commande d'arrière-plan
Le $! La variable contient l'ID de processus de la dernière commande d'arrière-plan exécutée par le script. Cette variable est utile pour créer des scripts shell qui doivent gérer plusieurs processus ou surveiller la progression des commandes à long terme.
Par exemple, supposons que vous ayez un script appelé "arrière-plan.sh ” qui exécute une commande en arrière-plan et enregistre ses progrès. Dans ce cas, vous pouvez utiliser le $! variable pour surveiller la progression de la commande.
#!/ bin / bash myCommand & pid = $! tandis que ps -p $ pid> / dev / null; Do echo "La commande est toujours en cours d'exécution" Sleep 1 Done Echo "Commande a terminé"12345678 | #!/ bin / bashmycommand & pid = $!tandis que ps -p $ pid> / dev / null; Do Echo "Commande est toujours en cours d'exécution" Sleep 1DoneECH "Commande a terminé" |
Conclusion
En conclusion, les variables spéciales bash fournissent des informations essentielles sur l'environnement dans lequel le script s'exécute. Ces variables vous permettent de créer des scripts de coquille plus flexibles, robustes et résistants aux erreurs. En maîtrisant l'utilisation de ces variables, vous pouvez faire passer vos compétences de script de coquille au niveau supérieur.
- « Utiliser AWK, BC et Expr pour effectuer des calculs mathématiques dans Bash
- Calculs mathématiques en bash »