8 astuces du shell Linux qui changent complètement le fonctionnement des commandes
Agence web » Actualités du digital » 8 astuces du shell Linux qui changent complètement le fonctionnement des commandes

8 astuces du shell Linux qui changent complètement le fonctionnement des commandes

Le shell est le héros méconnu de votre expérience Linux. Situé entre vous et les programmes exécutés par votre système d’exploitation, le shell est à la fois une interface utilisateur et un langage de programmation.

L'une des responsabilités du shell est d'appliquer diverses extensions à la commande que vous tapez, en insérant des variables, par exemple. L’expansion implique cependant plusieurs étapes, il vaut donc la peine de comprendre le processus dans son intégralité.

Expansion du corset

La toute première étape consiste à prendre des expressions entre accolades et à les transformer en chaînes avec un préfixe et un suffixe facultatifs. Ceci est utile pour générer des listes de mots plus longues basées sur un modèle simple. Par exemple, le premier type de développement d'accolades utilise des virgules pour séparer les alternatives :

echo a{b,c}de

Votre shell étendra ceci à Echo Abdé Acdé.

Utiliser echo comme celui-ci vous permet de voir le résultat final après expansion.

L'autre type d'expansion d'accolade utilise une expression de séquence :

$ echo a.{1..5}.z
a.1.z a.2.z a.3.z a.4.z a.5.z

Dans ce cas, {1..5} est l'abréviation de {1,2,3,4,5}. Vous pouvez également utiliser des lettres au lieu de chiffres.

Extension des tildes

Dans sa forme la plus basique, le caractère tilde est un raccourci vers votre répertoire personnel, par exemple

$ echo ~
/Users/bobby

Il existe cependant d'autres extensions de tilde, par exemple :

  • ~user se développe jusqu'au chemin du répertoire personnel de cet utilisateur.

  • ~+ se développe vers le répertoire de travail actuel (PWD).

  • ~- se développe vers le répertoire de travail précédent (OLDPWD).

Expansion des paramètres et des variables

Pour accéder à une variable, utilisez un $ suivi de son nom ou, s'il s'agit d'un paramètre de position (utilisé dans les scripts et fonctions shell), de son numéro.

echo $PATH

foo() { echo $1 } && foo hello

Dans la plupart des cas, vous devez mettre le nom de la variable entre accolades :

echo ${PATH}

Cela permet d'éviter de nombreuses erreurs et vous prépare également à utiliser l'un des nombreux types avancés d'extension de paramètres pris en charge par Bash. Par exemple, vous pouvez définir une variable sur une valeur par défaut si elle n'est pas définie ou nulle, à l'aide de l'option :- syntaxe:

LOCAL_PATH=${PATH:-/bin}

Vous pouvez également effectuer une manipulation de chaîne de base en utilisant l'expansion de sous-chaîne :

$ GREETING="Hello, world"
$ echo ${GREETING:7}

world

Vous pouvez même convertir une chaîne en majuscules ou obtenir sa longueur :

$ TITLE="lowercase"
$ echo ${TITLE@U}
LOWERCASE

$ echo ${#TITLE}
9

Bash prend en charge de nombreux autres types d'expansion de paramètres, il vaut donc la peine d'explorer ses fonctionnalités de manipulation de chaînes.

Remplacement de commande

La substitution de commandes est l'une des mises à niveau les plus pratiques que vous puissiez apporter à votre vie quotidienne de shell, surtout si vous écrivez des scripts. En termes simples, cela ressemble à ceci :

echo $(ls)

Bash exécutera la commande dans un sous-shell, en remplaçant le $(…) d'origine par sa sortie. Ceci est souvent utile lorsque la commande génère un nom de fichier. Par exemple, la commande mktemp crée un fichier temporaire et affiche son nom. Ainsi, pour commencer à éditer un fichier temporaire avec une seule commande, vous pouvez exécuter :

vi $(mktemp)

Ou vous pouvez créer et saisir un répertoire temporaire avec :

cd $(mktemp -d)

Développement arithmétique

Vous constaterez probablement que l’arithmétique est la plus utile dans certains types de scripts shell. La chose la plus délicate à propos du développement arithmétique est de se souvenir de la syntaxe des doubles crochets :

$(( 11 * 42 ))

En dehors de cela, vous pouvez effectuer toutes les opérations arithmétiques entières de base auxquelles vous vous attendez : multiplication, post-incrémentation et décalages au niveau du bit, par exemple. Vous pouvez également utiliser des opérateurs de comparaison standard comme == pour l'égalité et des opérateurs logiques comme && pour AND.

Fractionnement de mots

À ce stade, le shell divise en mots les résultats des expansions précédentes qui ne se sont pas produites entre guillemets doubles. Il se divise en caractères de la variable IFS, qui sont généralement un espace, une tabulation et une nouvelle ligne.

Prenons cet exemple :

FILES="one two three"
ls ${FILES}

Bash remplacera initialement la deuxième commande par « ls un deux trois ». Étant donné que cette expansion n'a pas été entre guillemets, la division des mots entraînera la transmission de trois paramètres à ls : un, deux et trois. Mais si l’agrandissement était cité, ce serait une autre histoire :

FILES="one two three"
ls "${FILES}"

Dans ce cas, ls se plaindra d'un fichier manquant nommé « un deux trois ». Cela souligne la différence entre trois arguments séparés par des espaces et un seul argument contenant des espaces.

Extension du nom de fichier

L'expansion du nom de fichier, également connue sous le nom de globbing, vous permet de faire correspondre les fichiers à l'aide de modèles. Même si vous n'avez jamais entendu parler de globbing ou d'extension de nom de fichier, vous l'avez probablement déjà utilisé, comme ceci :

ls *.txt

Avec cette forme d'expansion, le shell recherche les cas non cités des caractères *, ? et (. S'il en trouve un, il traite ce mot comme un modèle et le remplace par tous les noms de fichiers correspondants.

Alors que * correspond à n'importe quel nombre de caractères, ? correspond à un seul caractère, et (…) correspond à un caractère de l'ensemble donné.

Suppression du devis

Enfin, les guillemets (et la barre oblique inverse, qui peut être utilisée pour les échapper) sont supprimés de n'importe quelle partie de la chaîne d'origine avant les extensions.

Cela vous permet de citer les arguments que vous souhaitez traiter comme un seul argument, même s'ils contiennent des espaces. Donc, pour lister un fichier au nom problématique :

ls "a filename with spaces"

Sans guillemets, ls essaiera de répertorier quatre fichiers distincts avec des noms d'un seul mot.

★★★★★