Si vous souhaitez maîtriser le shell Bash sous Linux, macOS ou un autre système de type UNIX, les caractères spéciaux (tels que ~, *, | et>) sont essentiels. Nous vous aiderons à démêler ces séquences de commandes Linux cryptiques et à devenir un héros des hiéroglyphes.
Que sont les caractères spéciaux?
Il y a un ensemble de caractères le Coquille de bash traite de deux manières différentes. Lorsque vous les tapez dans le shell, ils agissent comme des instructions ou des commandes et indiquent au shell d’exécuter une certaine fonction. Considérez-les comme des commandes à un seul caractère.
Parfois, vous voulez simplement imprimer un caractère et vous n’en avez pas besoin pour agir comme un symbole magique. Il existe un moyen d’utiliser un caractère pour se représenter lui-même plutôt que sa fonction spéciale.
Nous allons vous montrer quels caractères sont des caractères «spéciaux» ou «méta», ainsi que comment vous pouvez les utiliser fonctionnellement et littéralement.
~ Répertoire d’accueil
Le tilde (~) est un raccourci pour votre répertoire personnel. Cela signifie que vous n’avez pas à taper le chemin complet de votre répertoire personnel dans les commandes. Où que vous soyez dans le système de fichiers, vous pouvez utiliser cette commande pour accéder à votre répertoire personnel:
cd ~
Vous pouvez également utiliser cette commande avec des chemins relatifs. Par exemple, si vous vous trouvez quelque part dans le système de fichiers qui ne se trouve pas dans votre dossier de départ et que vous souhaitez passer au archive
répertoire dans votre work
répertoire, utilisez le tilde pour le faire:
cd ~/work/archive
. Répertoire actuel
Un point (.) Représente le répertoire courant. Vous le voyez dans les listes de répertoires si vous utilisez le -a
(tout) option avec ls
.
ls -a
Vous pouvez également utiliser le point dans les commandes pour représenter le chemin d’accès à votre répertoire actuel. Par exemple, si vous souhaitez exécuter un script à partir du répertoire actuel, vous l’appelleriez comme ceci:
./script.sh
Cela indique à Bash de rechercher dans le répertoire courant le script.sh
déposer. De cette façon, il ne recherchera pas dans les répertoires de votre chemin un exécutable ou un script correspondant.
.. Dossier Parent
Le double point ou «double point» (..) représente le répertoire parent de votre répertoire actuel. Vous pouvez l’utiliser pour remonter d’un niveau dans l’arborescence des répertoires.
cd ..
Vous pouvez également utiliser cette commande avec des chemins relatifs, par exemple, si vous souhaitez monter d’un niveau dans l’arborescence de répertoires, puis entrer un autre répertoire à ce niveau.
Vous pouvez également utiliser cette technique pour vous déplacer rapidement vers un répertoire au même niveau dans l’arborescence de répertoires que votre répertoire actuel. Vous montez d’un niveau, puis vous en redescendez un dans un répertoire différent.
cd ../gc_help
/ Séparateur de répertoire de chemin
Vous pouvez utiliser une barre oblique (/) – souvent simplement appelée barre oblique – pour séparer les répertoires dans un chemin.
ls ~/work/archive
Une barre oblique représente le chemin de répertoire le plus court possible. Comme tout dans l’arborescence de répertoires Linux commence au répertoire racine, vous pouvez utiliser cette commande pour vous déplacer rapidement vers le répertoire racine:
cd /
# Commenter ou couper les chaînes
Le plus souvent, vous utilisez le dièse ou le signe dièse (#) pour dire au shell que ce qui suit est un commentaire, et il ne doit pas agir en conséquence. Vous pouvez l’utiliser dans des scripts shell et – moins utilement – sur la ligne de commande.
# This will be ignored by the Bash shell
Cependant, il n’est pas vraiment ignoré, car il est ajouté à votre historique de commandes.
Vous pouvez également utiliser le hachage pour découper une variable de chaîne et supprimer du texte depuis le début. Cette commande crée une variable de chaîne appelée this_string
.
Dans cet exemple, nous attribuons le texte «Dave Geek!» à la variable.
this_string="Dave Geek!"
Cette commande utilise echo
pour imprimer les mots «How-To» dans la fenêtre du terminal. Il récupère la valeur stockée dans la variable chaîne via un expansion des paramètres. Étant donné que nous ajoutons le hachage et le texte «Dave», il supprime cette partie de la chaîne avant qu’elle ne soit transmise à echo
.
echo How-To ${this_string#Dave}
Cela ne change pas la valeur stockée dans la variable chaîne; cela n’affecte que ce qui est envoyé à echo
. On peut utiliser echo
pour imprimer à nouveau la valeur de la variable chaîne et vérifier ceci:
echo $this_string
? Caractère générique unique
Le shell Bash prend en charge trois caractères génériques, dont l’un est le point d’interrogation (?). Vous utilisez des caractères génériques pour remplacer les caractères dans les modèles de nom de fichier. Un nom de fichier qui contient un caractère générique forme un modèle qui correspond à une plage de noms de fichiers, plutôt qu’à un seul.
Le caractère générique du point d’interrogation représente. Considérez le modèle de nom de fichier suivant:
ls badge?.txt
Cela se traduit par « lister tous les fichiers dont le nom commence par » badge « et est suivi d’un seul caractère avant l’extension du nom de fichier. »
Il correspond aux fichiers suivants. Notez que certains ont des chiffres et d’autres des lettres après la partie «badge» du nom de fichier. Le caractère générique du point d’interrogation correspondra à la fois aux lettres et aux chiffres.
Ce modèle de nom de fichier ne correspond pas à «badge.txt», car le nom de fichier n’a pas un seul caractère entre «badge» et l’extension de fichier. Le caractère générique du point d’interrogation doit correspondre à un caractère correspondant dans le nom de fichier.
Vous pouvez également utiliser le point d’interrogation pour rechercher tous les fichiers avec un nombre spécifique de caractères dans les noms de fichiers. Cela répertorie tous les fichiers texte contenant exactement cinq caractères dans le nom de fichier:
ls ?????.txt
* Caractère générique de séquence de caractères
Vous pouvez utiliser l’astérisque
ls badge*
wildcard pour représenter l’un des caractères, y compris. Considérez le modèle de nom de fichier suivant:
Cela correspond à tous les éléments suivants:
Il correspond à «badge.txt» car le caractère générique représente n’importe quelle séquence de caractères ou aucun caractère.
ls source.*
[] Cette commande correspond à tous les fichiers appelés «source», quelle que soit l’extension du fichier.
Jeu de caractères générique
Comme indiqué ci-dessus, vous utilisez le point d’interrogation pour représenter n’importe quel caractère unique et l’astérisque pour représenter n’importe quelle séquence de caractères (y compris aucun caractère). [] Vous pouvez former un caractère générique avec les crochets (
) et les caractères qu’ils contiennent. Le caractère pertinent dans le nom de fichier doit alors correspondre à au moins un des caractères du jeu de caractères génériques.
ls badge_0[246].txt
Dans cet exemple, la commande se traduit par: « tout fichier avec une extension » .png « , un nom de fichier commençant par » pipes_0 « et dans lequel le caractère suivant est 2, 4 ou 6. »
ls badge_[01][789].txt
Vous pouvez utiliser plusieurs jeux de crochets par modèle de nom de fichier:
ls badge_[23][1-5].txt
Vous pouvez également inclure des plages dans le jeu de caractères. La commande suivante sélectionne les fichiers avec les numéros 21 à 25 et 31 à 35 dans le nom de fichier.
; Séparateur de commandes Shell
ls > count.txt; wc -l count.txt; rm count.txt
Vous pouvez taper autant de commandes que vous le souhaitez sur la ligne de commande, à condition de séparer chacune d’elles par un point-virgule (;). Nous allons le faire dans l’exemple suivant:
Notez que la deuxième commande s’exécute même si la première échoue, la troisième s’exécute même si la seconde échoue, et ainsi de suite.
cd ./doesntexist && cp ~/Documents/reports/* .
Si vous souhaitez arrêter la séquence d’exécution si une commande échoue, utilisez une double esperluette (&&) au lieu d’un point-virgule:
& Processus d’arrière-plan gedit
Une fois que vous avez tapé une commande dans une fenêtre de terminal et qu’elle se termine, vous revenez à l’invite de commande. Normalement, cela ne prend qu’un moment ou deux. Mais si vous lancez une autre application, telle que
, vous ne pouvez pas utiliser la fenêtre de votre terminal tant que vous n’avez pas fermé l’application.
gedit command_address.page &
Vous pouvez cependant lancer une application en arrière-plan et continuer à utiliser la fenêtre du terminal. Pour ce faire, ajoutez simplement une esperluette à la ligne de commande:
Bash vous montre l’ID de processus de ce qui a été lancé, puis vous renvoie à la ligne de commande. Vous pouvez ensuite continuer à utiliser la fenêtre de votre terminal.
De nombreuses commandes Linux acceptent un fichier comme paramètre et prennent leurs données à partir de ce fichier. La plupart de ces commandes peuvent également prendre des entrées à partir d’un flux. Pour créer un flux, vous utilisez le crochet à angle gauche (<), comme indiqué dans l'exemple suivant, pour rediriger un fichier vers une commande: Lorsqu’une commande a une entrée redirigée vers elle, elle peut se comporter différemment que lorsqu’elle lit à partir d’un fichier nommé. , il imprime les mêmes valeurs numériques mais ne connaît pas le nom du fichier d’où proviennent les données. Il ne peut pas imprimer un nom de fichier. > Redirection de sortie Vous pouvez utiliser le crochet à angle droit (>) pour rediriger la sortie d’une commande (généralement, dans un fichier); voici un exemple: . Voici comment procéder: | Tuyau Une chaîne «pipe» commande ensemble. Il prend la sortie d’une commande et la transmet à la suivante en tant qu’entrée. Le nombre de commandes canalisées (la longueur de la chaîne) est arbitraire. (inverse), de sorte que les résultats triés apparaîtront dans l’ordre inverse. ! Opérateur de NOT logique et d’historique de pipeline Le point d’exclamation (!) Est un opérateur logique qui signifie NON. . L’option (répertoire) teste la présence d’un répertoire appelé backup. La deuxième commande crée le répertoire. Parce que les doubles esperluettes séparent les deux commandes, Bash n’exécutera la seconde que si la première. Cependant, c’est le contraire de ce dont nous avons besoin. Si le test du répertoire «backup» réussit, nous devons le créer. Et si le test du répertoire «backup» échoue, la deuxième commande ne sera pas exécutée et le répertoire manquant ne sera pas créé. activé. modifie la réponse en «PAS d’échec», ce qui est. Donc, la commande pour créer le répertoire manquant a été exécutée. emballe beaucoup de punch quand vous en avez besoin! (répertoire), comme indiqué ci-dessous: pour l’exécuter, comme indiqué ci-dessous: $ Expressions variables Dans le shell Bash, vous créez des variables pour contenir des valeurs. Certains, comme Variables d’environnement, existent toujours, et vous pouvez y accéder à chaque fois que vous ouvrez une fenêtre de terminal. Ceux-ci contiennent des valeurs, telles que votre nom d’utilisateur, votre répertoire de base et votre chemin. pour voir la valeur d’une variable, faites simplement précéder le nom de la variable du signe dollar ($), comme indiqué ci-dessous: lorsque vous référencez une variable, comme dans l’exemple suivant: Ajoutez des accolades ({}) autour du signe dollar et effectuez une expansion des paramètres pour obtenir la valeur de la variable et permettre d’autres transformations de la valeur. Cela crée une variable qui contient une chaîne de caractères, comme indiqué ci-dessous: Utilisez la commande suivante pour faire écho à la chaîne dans la fenêtre du terminal: Pour renvoyer la sous-chaîne commençant à la position 6 de la chaîne entière, utilisez la commande suivante (il y a un décalage zéro, donc la première position est zéro): Si vous souhaitez faire écho à une sous-chaîne qui commence à la position zéro et contient les six caractères suivants, utilisez la commande suivante: Citations de caractères spéciaux Si vous voulez utiliser un caractère spécial comme caractère littéral (non spécial), vous devez le dire au shell Bash. Cela s’appelle la citation, et il y a trois façons de le faire. Si vous mettez le texte entre guillemets («…»), cela empêche Bash d’agir sur la plupart des caractères spéciaux, et ils s’impriment simplement. Une exception notable, cependant, est le signe dollar ($). Il fonctionne toujours comme le caractère des expressions de variables, vous pouvez donc inclure les valeurs des variables dans votre sortie. Par exemple, cette commande imprime la date et l’heure: Si vous mettez le texte entre guillemets simples (‘…’) comme indiqué ci-dessous, cela arrête la fonction des caractères spéciaux: Vous pouvez utiliser une barre oblique inverse () pour empêcher le caractère suivant de fonctionner comme un caractère spécial. Cela s’appelle «échapper» au caractère; voir l’exemple ci-dessous: Pensez simplement aux caractères spéciaux comme à des commandes très courtes. Si vous mémorisez leurs utilisations, cela peut grandement améliorer votre compréhension du shell Bash et des scripts d’autres personnes.
sort < words.txt
wc
Si nous utilisons wc
pour compter les mots, les lignes et les caractères d’un fichier, il imprime les valeurs, puis le nom du fichier. Si nous redirigeons le contenu du fichier verswc
Voici quelques exemples d’utilisationwc words.txt
wc < words.txt
:
ls > files.txt
cat files.txt
>
La redirection de sortie peut également rediriger les messages d’erreur si vous utilisez un chiffre (2, dans notre exemple) avecwc doesntexist.txt 2> errors.txt
cat errors.txt
cat
Ici, nous allons utiliser grep
pour alimenter le contenu du fichier words.txt dans grep
, qui extrait toute ligne contenant un «C» minuscule ou majuscule sort
transmettra ensuite ces lignes à sort
. -r
utilise lecat words.txt | grep [cC] | sort -r
Nous avons tapé ce qui suit:
[ ! -d ./backup ] && mkdir ./backup
&&
La deuxième commande est le texte qui suit les doubles esperluettes!
La première commande utilise -d
comme opérateur logique. Les crochets indiquent qu’un test va être effectué. Le!
C’est là que l’opérateur logique !
entre. Il agit comme un NON logique. Donc, si le test réussit (c’est-à-dire que le répertoire existe), le retourne cela à «PAS de succès», ce qui est. Donc, la deuxième commande n’est pas!
Si le test du répertoire échoue (c’est-à-dire que le répertoire n’existe pas), le!
Ce petitls
Pour vérifier l’état du dossier de sauvegarde, vous utilisez le -l
commande et le -d
(longue liste) etls -l -d backup
history
Vous pouvez également exécuter des commandes à partir de votre historique de commandes avec le point d’exclamation. Le !
commande répertorie votre historique de commandes, puis vous tapez le numéro de la commande que vous souhaitez réexécuter avec!24
!!
La commande suivante réexécute la commande précédente:
echo
Vous pouvez utiliserecho $USER
echo $HOME
echo $PATH
$
Pour créer une variable, vous devez lui donner un nom et lui fournir une valeur à tenir. Vous devez utiliser le signe dollar pour créer une variable. Vous n’ajoutez queThisDistro=Ubuntu
MyNumber=2001
echo $ThisDistro
echo $MyNumber
MyString=123456qwerty
echo ${MyString}
echo ${myString:6}
echo ${myString:0:6}
echo ${myString:4:4}
Utilisez la commande suivante pour faire écho à une sous-chaîne qui commence à la position quatre et contient les quatre caractères suivants:
echo "Today is $(date)"
echo 'Today is $(date)'
echo "Today is $(date)"