Skip to main content

Ash - Linux Command

Pipes, Grep, Sort Commands: Linux Tutorial 9 (Juin 2025)

Pipes, Grep, Sort Commands: Linux Tutorial 9 (Juin 2025)
Anonim

PRÉNOM

sh - interpréteur de commandes (shell)

SYNOPSIS

sh -/ + aCefnuvxIimqsVEbc -o nom long -mots cible …

LA DESCRIPTION

Sh est l'interpréteur de commande standard du système. La version actuelle desh est en train d'être modifié pour se conformer à laPOSIX Spécifications 1003.2 et 1003.2a pour le shell. Cette version présente de nombreuses fonctionnalités qui la rendent similaire à certains égards au shell Korn, mais il ne s'agit pas d'un clone de shell Korn (voir ksh (1)). Seules les fonctionnalités désignées parPOSIX plus quelques extensions de Berkeley, sont en cours d’intégration dans cette coque. Nous attendonsPOSIX conformité au moment où 4.4 BSD est publié. Cette page de manuel n'est pas un didacticiel ni une spécification complète du shell.

Vue d'ensemble

Le shell est une commande qui lit les lignes d'un fichier ou du terminal, les interprète et exécute généralement d'autres commandes. C'est le programme en cours d'exécution lorsqu'un utilisateur se connecte au système (bien qu'un utilisateur puisse sélectionner un shell différent avec la commande chsh (1)). Le shell implémente un langage doté de structures de contrôle de flux, une fonction macro offrant diverses fonctionnalités en plus du stockage de données, ainsi que des fonctionnalités intégrées d’historique et de modification de ligne. Il intègre de nombreuses fonctionnalités pour faciliter l'utilisation interactive et présente l'avantage que le langage d'interprétation est commun aux utilisations interactive et non interactive (scripts shell). Autrement dit, les commandes peuvent être directement saisies dans le shell en cours d’exécution ou dans un fichier et le fichier peut être exécuté directement par le shell.

Invocation

Si aucun argument n'est présent et si l'entrée standard du shell est connectée à un terminal (ou si le -jele drapeau est défini), et le -c Si l'option n'est pas présente, le shell est considéré comme un shell interactif. Un shell interactif demande généralement avant chaque commande et gère les erreurs de programmation et de commande différemment (comme décrit ci-dessous). Lors du premier démarrage, le shell inspecte l'argument 0 et, s'il commence par un tiret, le shell est également considéré comme un shell de connexion. Cela se fait normalement automatiquement par le système lorsque l'utilisateur se connecte pour la première fois. Un shell de connexion lit d'abord les commandes à partir des fichiers / etc / profile et .profile s'ils existent. Si la variable d'environnementENV est défini lors de l'entrée dans un shell, ou est défini dans le fichier .profile d'un shell de connexion, le shell lit ensuite les commandes du fichier nommé dansENVPar conséquent, un utilisateur doit placer les commandes à exécuter uniquement au moment de la connexion dans le fichier .profile, ainsi que les commandes exécutées pour chaque shell du fichier.ENV fichier. Pour régler leENV variable à un fichier, placez la ligne suivante dans votre .profile de votre répertoire personnel

ENV = $ HOME / .shinit; exportation ENV

en substituant à «.shinit» tout nom de fichier que vous souhaitez. Depuis leENV le fichier est lu à chaque appel du shell, y compris les scripts et les shells non interactifs, le paradigme suivant est utile pour limiter les commandes de laENV fichier aux invocations interactives. Placez les commandes dans les champs "case" et "esac" ci-dessous (ces commandes sont décrites plus tard):

case $ - in * i *)

# commandes à usage interactif uniquement

esac

Si des arguments de ligne de commande autres que les options ont été spécifiés, le shell considère le premier argument comme le nom d'un fichier à partir duquel les commandes sont lues (un script shell) et les arguments restants sont définis comme paramètres de position du shell ($ 1 , 2 $, etc.). Sinon, le shell lit les commandes à partir de son entrée standard.

Traitement de la liste d'arguments

Toutes les options à lettre unique ont un nom correspondant qui peut être utilisé comme argument de -o option. L'ensemble -o nom est fourni à côté de l’option lettre simple dans la description ci-dessous. La spécification d'un tiret `` - '' active l'option, tandis que le signe plus `` '' la désactive. Les options suivantes peuvent être définies à partir de la ligne de commande ou à l’aide de la commande set (1) (décrite plus loin).

-une Allexport

Exporter toutes les variables assignées à. (UNIMPLEMENTED pour 4.4alpha)

-c

Lire les commandes à partir de la ligne de commande. Aucune commande ne sera lue à partir de l'entrée standard.

-C noclobber

Ne pas écraser les fichiers existants avec ">" (UNIMPLEMENTED for 4.4alpha)

-e errexit

S'il n'est pas interactif, quittez immédiatement si une commande non testée échoue. L’état de sortie d’une commande est considéré comme explicitement testé si la commande est utilisée pour contrôler unesi en attendant oujusqu'à ce que ou si la commande est l'opérande de gauche d'un opérateur `` && '' ou `` || ''.

-F noglob

Désactiver l'expansion du chemin d'accès.

-n noexec

S'il n'est pas interactif, lisez les commandes mais ne les exécutez pas. Ceci est utile pour vérifier la syntaxe des scripts shell.

-u jeu de mots

Écrivez un message d'erreur standard lorsque vous tentez de développer une variable non définie et, si le shell n'est pas interactif, quittez immédiatement. (UNIMPLEMENTED pour 4.4alpha)

-v verbeux

Le shell écrit son entrée en erreur standard au fur et à mesure de sa lecture. Utile pour le débogage.

-X Xtrace

Ecrivez chaque commande en erreur standard (précédée d'un «+» avant son exécution. Utile pour le débogage.

-q profil tranquille

Si la -v ou -X les options ont été définies, ne les appliquez pas lors de la lecture des fichiers d’initialisation, c’est-à-dire / etc / profile .profile et le fichier spécifié par leENV variable d'environnement.

-JE ignorer

Ignorer les EOF de l'entrée lorsqu'il est interactif.

-je interactif

Forcer le shell à se comporter de manière interactive.

-m moniteur

Activer le contrôle du travail (défini automatiquement lorsque interactif).

-s stdin

Lire les commandes de l'entrée standard (à définir automatiquement si aucun argument de fichier n'est présent). Cette option est sans effet lorsqu'elle est définie après que le shell a déjà commencé à s'exécuter (c'est-à-dire avec set (1))

-V vi

Activer l'éditeur de ligne de commande vi (1) intégré (désactive -E s'il a été défini).

-E Emacs

Activer l'éditeur de ligne de commande emacs (1) intégré (désactive -V s'il a été défini).

-b notifier

Activer la notification asynchrone de l'achèvement du travail en arrière-plan. (UNIMPLEMENTED pour 4.4alpha)

Structure lexicale

Le shell lit les entrées en termes de lignes dans un fichier et les divise en mots au niveau des blancs (espaces et tabulations) et de certaines séquences de caractères propres au shell, appelées «opérateurs». Il existe deux types d'opérateurs: opérateurs de contrôle et opérateurs de redirection (leur signification est discutée plus loin). Voici une liste d'opérateurs:

"Opérateurs de contrôle:"

& && ( ) ; ;; | ||

"Opérateur de redirection:"

< > >| << >> <& >& <<- <>

Citant

La citation est utilisée pour supprimer la signification particulière de certains caractères ou mots du shell, tels que des opérateurs, des espaces ou des mots-clés. Il existe trois types de guillemets: les guillemets simples appariés, les guillemets doubles appariés et la barre oblique inversée.

Barre oblique inverse

Une barre oblique inverse préserve la signification littérale du caractère suivant, à l'exception de Aq newline. Une barre oblique inverse précédant une nouvelle ligne Aq est traitée comme une continuation de ligne.

Guillemets simples

Le fait de placer des caractères entre guillemets simples préserve la signification littérale de tous les caractères (à l'exception des guillemets simples, ce qui rend impossible la mise de guillemets simples dans une chaîne entre guillemets simples).

Double citation

Les caractères entre guillemets doubles conservent la signification littérale de tous les caractères sauf dollarsign ($) backquote (`) et barre oblique inversée ().

$ `

Sinon, cela reste littéral.

Mots réservés

Les mots réservés sont des mots qui ont une signification particulière pour le shell et qui sont reconnus au début d'une ligne et après un opérateur de contrôle. Les mots suivants sont réservés:

! Tacas elif Ta fi Ta tant que Ta

d'autre Tapour Ta alors Ta {Ta}

dotafait Ta jusqu'à Ta si Ta esac

Leur signification est discutée plus tard.

Alias

Un alias est un nom et la valeur correspondante définie à l'aide de la commande intégrée alias (1). Chaque fois qu'un mot réservé peut apparaître (voir ci-dessus), et après vérification des mots réservés, le shell vérifie le mot pour voir s'il correspond à un alias. Si c'est le cas, il le remplace dans le flux d'entrée par sa valeur. Par exemple, s'il existe un alias appelé «lf» avec la valeur «ls -F», l'entrée:

si foobar

deviendrait

ls -F foobar

Les alias offrent aux utilisateurs naïfs un moyen pratique de créer des raccourcis pour les commandes sans avoir à apprendre à créer des fonctions avec des arguments. Ils peuvent également être utilisés pour créer du code obscur lexicalement. Cette utilisation est découragée.

Les commandes

Le shell interprète les mots lus selon un langage dont la spécification sort du cadre de cette page de manuel (reportez-vous à la BNF dans lePOSIX Document 1003.2). Cependant, une ligne est lue et si le premier mot de la ligne (ou après un opérateur de contrôle) n'est pas un mot réservé, le shell a reconnu une commande simple. Sinon, une commande complexe ou une autre construction spéciale peut avoir été reconnue.

Commandes simples

Si une commande simple a été reconnue, le shell effectue les actions suivantes:

  1. Les mots principaux de la forme `` nom = valeur '' sont supprimés et affectés à l'environnement de la commande simple. Les opérateurs de redirection et leurs arguments (comme décrit ci-dessous) sont supprimés et enregistrés pour traitement.

  2. Les mots restants sont développés comme décrit dans la section intitulée «Expansions» et le premier mot restant est considéré comme le nom de la commande et la commande est localisée. Les mots restants sont considérés comme les arguments de la commande. Si aucun nom de commande n'a été obtenu, les affectations de variable `` nom = valeur '' reconnues dans l'élément 1 affectent le shell actuel.

  3. Les redirections sont effectuées comme décrit dans la section suivante.

Redirections

Les redirections permettent de modifier le lieu où une commande lit son entrée ou envoie sa sortie. En général, les redirections ouvrent, ferment ou dupliquent une référence existante dans un fichier. Le format global utilisé pour la redirection est le suivant:

n fichier redir-op

où redir-op est l'un des opérateurs de redirection mentionnés précédemment. Voici une liste des redirections possibles. Le Bq n est un nombre optionnel, comme dans «3» (et non «Bq 3» qui fait référence à un descripteur de fichier.

n> fichier

Redirige la sortie standard (ou n) vers le fichier.

n> | fichier

Idem, mais remplacez le -C option.

n >> fichier

Ajouter la sortie standard (ou n) au fichier.

n <fichier

Redirige l'entrée standard (ou n) du fichier.

n1 <& n2

Dupliquer l’entrée standard (ou n1) du descripteur de fichier n2.

n <& -

Fermez l'entrée standard (ou n).

n1> & n2

Dupliquer la sortie standard (ou n1) de n2.

n> & -

Fermer la sortie standard (ou n).

n <> fichier

Ouvrir le fichier pour lire et écrire sur l'entrée standard (ou n).

La redirection suivante est souvent appelée un `` here-document ''

n << délimiteur

ici-doc-texte …

délimiteur

Tout le texte sur les lignes successives jusqu'au séparateur est sauvegardé et mis à la disposition de la commande en entrée standard, ou du descripteur de fichier n s'il est spécifié.Si le délimiteur spécifié sur la ligne initiale est cité, alors le texte here-doc-text est traité littéralement, sinon le texte est soumis à une expansion des paramètres, à une substitution de commande et à une expansion arithmétique (comme décrit dans la section "Expansions"). 'Si l'opérateur est `` << -' 'au lieu de' '' '', les onglets principaux du texte here-doc-text sont supprimés.

Recherche et exécution

Il existe trois types de commandes: les fonctions shell, les commandes intégrées et les programmes normaux - et la commande est recherchée (par nom) dans cet ordre. Ils sont chacun exécutés d'une manière différente.

Lorsqu'une fonction shell est exécutée, tous les paramètres de position du shell (à l'exception de $ 0, qui reste inchangé) sont définis sur les arguments de la fonction shell. Les variables explicitement placées dans l'environnement de la commande (en leur affectant des attributions avant le nom de la fonction) sont rendues locales par la fonction et sont définies sur les valeurs indiquées. Ensuite, la commande donnée dans la définition de la fonction est exécutée. Les paramètres de position sont restaurés à leurs valeurs d'origine lorsque la commande est terminée. Tout cela se produit dans le shell actuel.

Les commandes intégrées au shell sont exécutées en interne dans le shell sans générer de nouveau processus.

Sinon, si le nom de la commande ne correspond pas à une fonction ou à une fonction intégrée, la commande est recherchée en tant que programme normal dans le système de fichiers (comme décrit dans la section suivante). Lorsqu'un programme normal est exécuté, le shell l'exécute en transmettant les arguments et l'environnement au programme. Si le programme n’est pas un fichier exécutable normal (c’est-à-dire s’il ne commence pas par le "nombre magique" dontASCII la représentation est "#!", donc execve (2) renvoie Er ENOEXEC) le shell interprétera le programme dans un sous-shell. Le shell enfant se réinitialisera dans ce cas, de sorte que l'effet sera comme si un nouveau shell avait été appelé pour gérer le script de shell ad-hoc, à l'exception du fait que l'emplacement des commandes hachées situées dans le shell parent sera mémorisé. enfant.

Notez que les versions précédentes de ce document et le code source lui-même désignent de manière trompeuse et sporadique un script shell sans numéro magique comme une "procédure shell".

Recherche de chemin

Lors de la localisation d'une commande, le shell cherche d'abord à savoir s'il possède une fonction shell portant ce nom. Ensuite, il recherche une commande intégrée portant ce nom. Si aucune commande intégrée n'est trouvée, l'une des deux choses suivantes se produit:

  1. Les noms de commande contenant une barre oblique sont simplement exécutés sans effectuer de recherche.

  2. Le shell cherche chaque entrée dansCHEMIN à son tour pour la commande. La valeur de laCHEMINvariable devrait être une série d'entrées séparées par des deux points. Chaque entrée consiste en un nom de répertoire. Le répertoire en cours peut être indiqué implicitement par un nom de répertoire vide ou explicitement par un seul point.

Etat de sortie de la commande

Chaque commande a un statut de sortie pouvant influer sur le comportement des autres commandes du shell. Le paradigme est qu'une commande se termine avec zéro pour normal ou succès et non nul pour échec, erreur ou fausse indication. La page de manuel de chaque commande doit indiquer les différents codes de sortie et leur signification. De plus, les commandes intégrées renvoient les codes de sortie, comme le fait une fonction shell exécutée.

Commandes complexes

Les commandes complexes sont des combinaisons de commandes simples avec des opérateurs de contrôle ou des mots réservés, créant ainsi une commande complexe plus grande. Plus généralement, une commande est l'une des suivantes:

  • commande simple
  • pipeline
  • liste ou liste composée
  • commande composée
  • définition de la fonction

Sauf indication contraire, l'état de sortie d'une commande est celui de la dernière commande simple exécutée par la commande.

Pipelines

Un pipeline est une séquence d'une ou plusieurs commandes séparées par l'opérateur de contrôle |. La sortie standard de toutes les commandes sauf la dernière est connectée à l'entrée standard de la commande suivante. La sortie standard de la dernière commande est héritée du shell, comme d’habitude.

Le format d'un pipeline est:

! command1 | commande2 …

La sortie standard de commande1 est connectée à l'entrée standard de commande2. L'entrée standard, la sortie standard ou les deux d'une commande sont considérés comme étant affectés par le pipeline avant toute redirection spécifiée par les opérateurs de redirection faisant partie de la commande.

Si le pipeline n'est pas en arrière-plan (voir plus loin), le shell attend la fin de toutes les commandes.

Si le mot réservé! ne précède pas le pipeline, le statut de sortie correspond au statut de sortie de la dernière commande spécifiée dans le pipeline. Sinon, l'état de sortie est le NON logique de l'état de sortie de la dernière commande. En d’autres termes, si la dernière commande renvoie zéro, l’état de sortie est 1; si la dernière commande renvoie plus de zéro, l'état de sortie est zéro.

L'affectation de pipeline de l'entrée standard ou de la sortie standard, ou des deux à la fois, avant la redirection, vous pouvez la modifier par redirection. Par exemple:

$ command1 2> & 1 | commande2

envoie à la fois la sortie standard et l'erreur standard de commande1 à l'entrée standard de commande2.

UNE ; ou terminateur provoque l'exécution séquentielle de la liste AND-OR précédente (décrite ci-après); a & provoque l'exécution asynchrone de la liste AND-OR précédente.

Notez que contrairement à certains autres shells, chaque processus du pipeline est un enfant du shell qui appelle (sauf s'il s'agit d'un shell intégré, auquel cas il s'exécute dans le shell actuel - mais tout effet qu'il a sur l'environnement est effacé).

Commandes de fond -

Si une commande est terminée par l'opérateur de contrôle esperluette (&), le shell l'exécute de manière asynchrone. En d'autres termes, il n'attend pas la fin de la commande avant d'exécuter la commande suivante.

Le format d'exécution d'une commande en arrière-plan est le suivant:

commande1 & commande2 & …

Si le shell n'est pas interactif, l'entrée standard d'une commande asynchrone est définie sur / dev / null

Listes - En général

Une liste est une séquence de zéro ou plusieurs commandes séparées par des lignes, des points-virgules ou des esperluettes, et éventuellement terminées par l'un de ces trois caractères. Les commandes d'une liste sont exécutées dans l'ordre dans lequel elles ont été écrites. Si commande est suivie d'une esperluette, le shell lance la commande et passe immédiatement à la commande suivante; sinon, il attend que la commande se termine avant de passer à la suivante.

Opérateurs de liste de court-circuit

`` && '' et '' || '' sont des opérateurs de liste AND-OR. `` && '' exécute la première commande, puis la seconde si le statut de sortie de la première commande est à zéro. `` || '' est similaire, mais exécute la deuxième commande si l'état de sortie de la première commande est différent de zéro. «&&» et «||» ont tous deux la même priorité.

Flow-Control Constructs - si, tant que, pour, cas

La syntaxe de la commande if est

si liste

puis lister

liste elif

puis lister …

autre liste

Fi

La syntaxe de la commande while est la suivante:

tout en liste

faire une liste

terminé

Les deux listes sont exécutées à plusieurs reprises tandis que l'état de sortie de la première liste est zéro. La commande Until est similaire, mais le mot Until prend la place de while, ce qui entraîne sa répétition jusqu'à ce que l'état de sortie de la première liste soit égal à zéro.

La syntaxe de la commande for est

pour variable dans mot …

faire une liste

terminé

Les mots sont développés, puis la liste est exécutée à plusieurs reprises avec la variable définie pour chaque mot. do et done peuvent être remplacés par "{" "et" "}"

La syntaxe de la commande break and continue est la suivante:

pause num

continuer num

Break termine le numéro le plus interne pour les boucles ou pendant la boucle. Continuer continue avec la prochaine itération de la boucle la plus interne. Celles-ci sont implémentées en tant que commandes intégrées.

La syntaxe de la commande case est

mot de cas dans

modèle) liste ;;

esac

Le modèle peut en réalité être un ou plusieurs modèles (voir Modèles de shell décrits plus loin), séparés par des caractères `` ''.

Regroupement des commandes

Les commandes peuvent être regroupées en écrivant soit

(liste)

ou

{ liste;

Le premier de ceux-ci exécute les commandes dans un sous-shell. Les commandes intégrées regroupées dans une (liste) n'affecteront pas le shell actuel. La seconde forme ne divise pas un autre shell, elle est donc légèrement plus efficace. Regrouper les commandes de cette façon vous permet de rediriger leur sortie comme s'il s'agissait d'un programme:

{printf bonjour; monde printf n ";}> message d'accueil

Les fonctions

La syntaxe d'une définition de fonction est

commande name ()

Une définition de fonction est une instruction exécutable. lorsqu'il est exécuté, il installe une fonction nommée nom et renvoie un état de sortie égal à zéro. La commande est normalement une liste entourée de `` {'' et de ``} ''

Les variables peuvent être déclarées locales à une fonction à l'aide d'une commande locale. Cela devrait apparaître comme la première déclaration d'une fonction, et la syntaxe est la suivante:

local variable | - …

Local est implémenté en tant que commande intégrée.

Lorsqu'une variable est rendue locale, elle hérite de la valeur initiale et des indicateurs exportés et en lecture seule de la variable portant le même nom dans la portée environnante, le cas échéant. Sinon, la variable est initialement non définie. Le shell utilise la portée dynamique, de sorte que si vous associez la variable x locale à la fonction f, qui appelle ensuite la fonction g, les références à la variable x créée dans g feront référence à la variable x déclarée dans f, et non à la variable globale nommée x. .

Le seul paramètre spécial pouvant être rendu local est `` - ''. Rendre local `` - '' toutes les options du shell qui sont modifiées via la commande set de la fonction à restaurer à leurs valeurs d'origine à leur retour.

La syntaxe de la commande de retour est

return exitstatus

Il termine la fonction en cours d'exécution. Return est implémenté en tant que commande intégrée.

Variables et paramètres

Le shell maintient un ensemble de paramètres. Un paramètre désigné par un nom s'appelle une variable. Lors du démarrage, le shell transforme toutes les variables d'environnement en variables shell. De nouvelles variables peuvent être définies en utilisant le formulaire

nom = valeur

Les variables définies par l'utilisateur doivent avoir un nom composé uniquement d'alphabet, de chiffres et de tirets de soulignement - le premier ne doit pas être numérique. Un paramètre peut également être désigné par un nombre ou un caractère spécial, comme expliqué ci-dessous.

Paramètres de position

Un paramètre de position est un paramètre désigné par un nombre (n> 0). Le shell définit initialement ces valeurs sur les valeurs de ses arguments de ligne de commande qui suivent le nom du script de shell. Le setin (1) intégré peut également être utilisé pour les définir ou les réinitialiser.

Paramètres spéciaux

Un paramètre spécial est un paramètre désigné par l'un des caractères spéciaux suivants. La valeur du paramètre est indiquée à côté de son caractère.

*

Se développe jusqu'aux paramètres de position, en commençant par un. Lorsque le développement se produit dans une chaîne entre guillemets, il se développe en un seul champ avec la valeur de chaque paramètre séparée par le premier caractère deIFS variable, ou par un siIFS est non réglé.

@

Se développe jusqu'aux paramètres de position, en commençant par un.Lorsque le développement se produit entre guillemets, chaque paramètre de position se développe en tant qu'argument séparé. S'il n'y a pas de paramètre de position, le développement de @ génère zéro argument, même lorsque @ est indiqué entre guillemets. Cela signifie, par exemple, que si $ 1 est «abc» et que 2 est «def ghi», alors Qq $ @ se développe en deux arguments:

abc def ghi

#

Augmente le nombre de paramètres de position.

?

Développe le statut de sortie du pipeline le plus récent.

- (Trait d'union.)

Développe les indicateurs d'option actuels (les noms d'option à lettre unique concaténés dans une chaîne) comme spécifié lors de l'appel, par la commande intégrée set ou implicitement par le shell.

$

Développe l'ID de processus du shell appelé. Un sous-shell conserve la même valeur de $ que son parent.

!

Développe l'ID de processus de la commande d'arrière-plan la plus récente exécutée à partir du shell actuel. Pour un pipeline, l'ID de processus est celui de la dernière commande du pipeline.

0 (zéro)

Développe le nom du shell ou du script shell.

Expansions de mots

Cette clause décrit les différentes extensions effectuées sur les mots. Toutes les extensions ne sont pas effectuées sur chaque mot, comme expliqué ultérieurement.

Les extensions tilde, les extensions de paramètres, les substitutions de commandes, les extensions arithmétiques et les suppressions de devis qui se produisent dans un même mot sont étendus à un seul champ. Ce n'est que par la division des champs ou l'extension du chemin d'accès que l'on peut créer plusieurs champs à partir d'un seul mot. La seule exception à cette règle est le développement du paramètre spécial @ entre guillemets, comme décrit ci-dessus.

L'ordre d'extension des mots est:

  1. Expansion Tilde, Expansion Paramètre, Substitution de Commande, Expansion Arithmétique (elles se produisent toutes en même temps).

  2. La division de champ est effectuée sur les champs générés à l'étape (1), sauf siIFS la variable est nulle.

  3. Pathname Expansion (sauf si défini -F est en vigueur).

  4. Enlèvement de devis.

Le caractère $ est utilisé pour introduire le développement de paramètre, la substitution de commande ou l'évaluation arithmétique.

Expansion de tilde (substitution du répertoire de base d'un utilisateur)

Un mot commençant par un caractère tilde sans guillemets (~) est soumis à une expansion du tilde. Tous les caractères jusqu'à la barre oblique (/) ou la fin du mot sont traités comme un nom d'utilisateur et sont remplacés par le répertoire de base de l'utilisateur. Si le nom d'utilisateur est manquant (comme dans ~ / foobar), le tilde est remplacé par la valeur du MAISON variable (répertoire de base de l'utilisateur actuel).

Paramètre Expansion

Le format d’expansion des paramètres est le suivant:

$ {expression}

où expression est composée de tous les caractères jusqu’à ce que le caractère ``} '' ne soit pas précédé d’une barre oblique inversée ou d’une chaîne entre guillemets, et les caractères des extensions arithmétiques, des substitutions de commande et des extensions de variable correspondant à ``} ''

La forme la plus simple pour l'expansion des paramètres est la suivante:

$ {paramètre}

La valeur éventuelle du paramètre est substituée.

Le nom du paramètre ou le symbole peut être placé entre accolades, qui sont facultatifs, sauf pour les paramètres de position comportant plusieurs chiffres ou lorsque ce paramètre est suivi d'un caractère pouvant être interprété comme faisant partie du nom. Si un paramètre est développé entre guillemets:

  1. L'extension de chemin d'accès n'est pas effectuée sur les résultats de l'extension.

  2. La division de champ n'est pas effectuée sur les résultats de l'extension, à l'exception de @.

De plus, une extension de paramètre peut être modifiée en utilisant l’un des formats suivants.

$ {paramètre: -word}

Utiliser les valeurs par défaut. Si le paramètre est unset ou null, le développement du mot est substitué; sinon, la valeur du paramètre est substituée.

$ {paramètre: = mot}

Attribuer des valeurs par défaut. Si le paramètre est unset ou null, le développement du mot est affecté au paramètre. Dans tous les cas, la valeur finale du paramètre est substituée. De cette manière, seules des variables, et non des paramètres de position ou des paramètres spéciaux, peuvent être affectées.

$ {paramètre:? mot}

Indiquer une erreur si Null ou Unset. Si le paramètre est unset ou null, le développement du mot (ou un message l'indiquant s'il est omis) est écrit en erreur standard et le shell quitte avec un statut de sortie non nul. Sinon, la valeur du paramètre est substituée. Un shell interactif n'a pas besoin de sortir.

$ {paramètre: + mot}

Utilisez la valeur alternative. Si le paramètre est unset ou null, null est substitué; sinon, l'expansion du mot est substituée.

Dans les extensions de paramètres indiquées précédemment, l'utilisation des deux-points dans le format permet de tester un paramètre non défini ou nul; L'omission des deux points entraîne le test d'un paramètre uniquement non défini.

$ {# paramètre}

Longueur de chaine. La longueur en caractères de la valeur de paramètre.

Les quatre types d’expansion de paramètres suivants permettent le traitement de la sous-chaîne. Dans chaque cas, la notation de correspondance de modèle (voir Modèles de shell), plutôt que la notation d'expression régulière, est utilisée pour évaluer les modèles. Si le paramètre est * ou @, le résultat de l'extension n'est pas spécifié. Le fait de mettre entre guillemets la chaîne d'expansion complète du paramètre ne provoque pas la citation des quatre types de caractères de modèle suivants, alors que le fait de citer des caractères entre accolades a cet effet.

$ {paramètre% mot}

Supprimer le plus petit modèle de suffixe. Le mot est développé pour produire un motif. Le paramètre expansion est ensuite associé à un paramètre, la plus petite partie du suffixe correspondant au modèle supprimé.

$ {paramètre %% mot}

Supprimer le plus grand modèle de suffixe.Le mot est développé pour produire un motif. Le paramètre expansion est ensuite associé à un paramètre, la plus grande partie du suffixe correspondant au modèle étant supprimée.

$ {paramètre # mot}

Supprimer le plus petit motif de préfixe. Le mot est développé pour produire un motif. Le paramètre de développement se traduit alors par paramètre, la plus petite partie du préfixe correspondant au modèle étant supprimée.

$ {paramètre ## mot}

Supprimer le plus grand modèle de préfixe. Le mot est développé pour produire un motif. Le paramètre de développement entraîne ensuite un paramètre, la plus grande partie du préfixe correspondant au modèle étant supprimée.

Substitution de commande

La substitution de commande permet de substituer la sortie d’une commande à la place du nom de la commande elle-même. La substitution de commande se produit lorsque la commande est enfermée comme suit:

$ (commande)

ou Po version `` backcoted '' Pc:

`commande`

Le shell étend la substitution de commande en exécutant la commande dans un environnement de sous-shell et en remplaçant la substitution de commande par la sortie standard de la commande, en supprimant les séquences d'un ou plusieurs s à la fin de la substitution. (Intégré s avant la fin de la sortie ne sont pas supprimés; cependant, lors de la division en champs, ils peuvent être traduits en s, en fonction de la valeur deIFS et citant qui est en vigueur.)

Expansion arithmétique

Le développement arithmétique fournit un mécanisme pour évaluer une expression arithmétique et lui substituer sa valeur. Le format de développement arithmétique est le suivant:

$ ((expression))

L'expression est traitée comme si elle était entre guillemets, à l'exception du fait qu'elle ne fait pas l'objet d'un traitement particulier. Le shell développe tous les jetons dans l'expression pour le développement de paramètres, la substitution de commandes et la suppression de devis.

Ensuite, le shell traite cela comme une expression arithmétique et substitue la valeur de l'expression.

Division en espaces blancs (division de champs)

Après le développement des paramètres, la substitution de commande et le développement arithmétique, le shell analyse les résultats des extensions et des substitutions qui ne se produisaient pas entre guillemets pour la division de champs et il peut en résulter plusieurs champs.

La coquille traite chaque personnage duIFS en tant que délimiteur et utilisez les délimiteurs pour fractionner les résultats de l’extension de paramètre et de la substitution de commande en champs.

Extension du chemin d'accès (génération du nom de fichier)

À moins que le -F Si l'indicateur est défini, la génération du nom de fichier est effectuée une fois le fractionnement du mot terminé. Chaque mot est considéré comme une série de motifs séparés par des barres obliques. Le processus d'expansion remplace le mot par les noms de tous les fichiers existants dont les noms peuvent être formés en remplaçant chaque motif par une chaîne correspondant au motif spécifié. Il existe deux restrictions à cela: premièrement, un modèle ne peut pas correspondre à une chaîne contenant une barre oblique, et deuxièmement, un modèle ne peut pas correspondre à une chaîne commençant par un point sauf si le premier caractère du modèle est un point. La section suivante décrit les modèles utilisés à la fois pour Pathname Expansion et pour la commande case (1).

Patterns Shell

Un modèle se compose de caractères normaux, qui se correspondent, et de méta-caractères. Les méta-caractères sont "!", "*", "?" Et "". Ces caractères perdent leur signification si ils sont cités. Lorsque la substitution de commande ou de variable est effectuée et que le signe dollar ou les guillemets arrières ne sont pas mis entre guillemets, la valeur de la variable ou la sortie de la commande est analysée pour ces caractères et ils sont transformés en méta-caractères.

Un astérisque («*») correspond à n’importe quelle chaîne de caractères. Un point d'interrogation correspond à n'importe quel caractère. Un crochet gauche (`` '') introduit une classe de caractères. La fin de la classe de caractères est indiquée par un (`` '') si le `` '' est manquant, alors le `` '' correspond à un `` '' plutôt que d'introduire une classe de caractères. Une classe de caractères correspond à l'un des caractères entre les crochets. Une plage de caractères peut être spécifiée à l'aide d'un signe moins. La classe de caractères peut être complétée en faisant d'un point d'exclamation le premier caractère de la classe de caractères.

Pour inclure un `` '' dans une classe de caractères, définissez-le comme premier caractère (après le `! '', Le cas échéant). Pour inclure un signe moins, indiquez le premier ou le dernier caractère répertorié.

Builtins

Cette section répertorie les commandes intégrées, car elles doivent exécuter certaines opérations impossibles à exécuter par un processus séparé. En plus de celles-ci, plusieurs autres commandes peuvent être intégrées pour améliorer l'efficacité (par exemple, echo 1).

:

Une commande null qui renvoie une valeur de sortie 0 (true).

. fichier

Les commandes du fichier spécifié sont lues et exécutées par le shell.

alias prénom = chaîne …

Si nom = chaîne est spécifié, le shell définit l'alias prénom avec valeur chaîne Si juste prénom est spécifié, la valeur de l'alias prénom est imprimé. Sans argument, lealias Builtin imprime les noms et les valeurs de tous les alias définis (voirunalias)

bg emploi …

Continuez les travaux spécifiés (ou le travail en cours si aucun travail n'est spécifié) en arrière-plan.

commander commande arg …

Exécutez la commande intégrée spécifiée. (Ceci est utile lorsque vous avez une fonction shell portant le même nom qu'une commande intégrée.)

CD annuaire

Basculer vers le répertoire spécifié (par défaut$ HOME) Si une entrée pourCDPATH apparaît dans l'environnement duCD commande ou la variable shellCDPATH est défini et le nom du répertoire ne commence pas par une barre oblique, puis les répertoires énumérés dansCDPATH sera recherché pour le répertoire spécifié. Le format deCDPATH est le même que celui deCHEMIN Dans un shell interactif, leCD La commande affichera le nom du répertoire auquel elle est passée, s’il est différent du nom que l’utilisateur a donné. Ceux-ci peuvent être différents, soit parce que leCDPATH mécanisme a été utilisé ou parce qu'un lien symbolique a été franchi.

eval chaîne…

Concaténer tous les arguments avec des espaces. Ensuite, analysez à nouveau et exécutez la commande.

exec commande arg …

À moins que la commande ne soit omise, le processus shell est remplacé par le programme spécifié (qui doit être un programme réel et non une fonction ou un composant intégré du shell). Toutes les redirections sur leexecLes commandes sont marquées comme permanentes afin qu'elles ne soient pas défaites lorsque leexec la commande se termine.

sortie état de sortie

Terminez le processus shell. Si état de sortie est donné, il est utilisé comme statut de sortie du shell; sinon, l'état de sortie de la commande précédente est utilisé.

exportation prénom…

export -p

Les noms spécifiés sont exportés afin qu'ils apparaissent dans l'environnement des commandes suivantes. La seule façon de désexporter une variable est de la désélectionner. Le shell permet de définir la valeur d’une variable en même temps qu’elle est exportée en écrivant

nom d'exportation = valeur

Sans argument, la commande export répertorie les noms de toutes les variables exportées. Avec le -poption spécifiée, la sortie sera formatée de manière appropriée pour une utilisation non interactive.

fc-e éditeur premier dernier

fc -l -nr premier dernier

fc -s ancien = nouveau premier

lefc Listes intégrées, ou édite et ré-exécute, les commandes précédemment entrées dans un shell interactif.

-e éditeur

Utilisez l'éditeur nommé par éditeur pour éditer les commandes. La chaîne de l'éditeur est un nom de commande, sujet à une recherche via leCHEMIN variable. La valeur dans leFCEDIT La variable est utilisée par défaut lorsque -e n'est pas spécifié. SiFCEDIT est nul ou non défini, la valeur deÉDITEUR la variable est utilisée. SiÉDITEUR est nul ou non défini, ed (1) est utilisé comme éditeur.

-l (ell)

Répertoriez les commandes plutôt que d’invoquer un éditeur. Les commandes sont écrites dans la séquence indiquée par les premier et dernier opérandes, comme indiqué par -r avec chaque commande précédée du numéro de commande.

-n

Supprimer les numéros de commande lors de la liste avec -l.

-r

Inverser l’ordre des commandes listées (avec -l ou édité (avec ni -l ni -s)

-s

Ré-exécutez la commande sans appeler un éditeur.

premier

dernier

Sélectionnez les commandes à répertorier ou à modifier. Le nombre de commandes précédentes accessibles est déterminé par la valeur du paramètreHISTSIZE variable. La valeur du premier ou du dernier ou des deux est l’un des suivants:

+ numéro

Un nombre positif représentant un numéro de commande; les numéros de commande peuvent être affichés avec -l option.

-nombre

Un nombre décimal négatif représentant la commande qui a été exécutée précédemment. Par exemple, -1 est la commande immédiatement précédente.

chaîne

Une chaîne indiquant la dernière commande entrée qui commence par cette chaîne. Si l'ancien = nouvel opérande n'est pas également spécifié avec -s la forme de chaîne du premier opérande ne peut pas contenir un signe égal incorporé.

Les variables d'environnement suivantes affectent l'exécution de fc:

FCEDIT

Nom de l'éditeur à utiliser.

HISTSIZE

Le nombre de commandes précédentes accessibles.

fg emploi

Déplace le travail spécifié ou le travail actuel au premier plan.

getopts optstring var

lePOSIX getopts commande, à ne pas confondre avec le Bell Labs getopt dérivée (1).

Le premier argument doit être une série de lettres, chacune pouvant être facultativement suivie de deux points pour indiquer que l'option nécessite un argument. La variable spécifiée est définie sur l'option analysée.

legetopts Cette commande déprécie le vieil utilitaire getopt (1), du fait de sa gestion des arguments contenant des espaces.

legetopts builtin peut être utilisé pour obtenir des options et leurs arguments à partir d’une liste de paramètres. Lorsqu'il est invoqué,getopts place la valeur de l'option suivante de la chaîne d'option dans la liste de la variable shell spécifiée par var et il est index dans la variable shellOPTIND Lorsque le shell est appelé,OPTIND est initialisé à 1. Pour chaque option nécessitant un argument, legetopts Builtin le placera dans la variable shellOPTARG Si une option n'est pas autorisée dans le optstring puisOPTARG sera non réglé.

optstring est une chaîne de lettres d'option reconnues. Si une lettre est suivie de deux points, l’option doit comporter un argument qui peut ou non en être séparé par un espace. Si un caractère d'option n'est pas trouvé où prévu,getopts va définir la variable var à un "?"getopts sera alors désarméOPTARG et écrire la sortie en erreur standard. En spécifiant un colon comme premier caractère de optstring toutes les erreurs seront ignorées.

Une valeur différente de zéro est renvoyée lorsque la dernière option est atteinte. S'il ne reste aucun argument,getopts mettra var à l'option spéciale `` - '' sinon, il va définir var à "?"

Le fragment de code suivant montre comment traiter les arguments d'une commande pouvant prendre les options a et b et l'option c qui nécessite un argument.

tandis que getopts abc: ffairecase $ f dansa | b) drapeau = $ f ;;c) carg = $ OPTARG ;;?) echo $ USAGE; sortie 1 ;;esacterminéshift `expr $ OPTIND - 1`

Ce code acceptera l’un des éléments suivants comme équivalent:

cmd -acarg file filecmd -a -c fichier argcmd -carg -a fichiercmd -a -carg - fichier fichier

hash -rv commander…

Le shell maintient une table de hachage qui mémorise les emplacements des commandes. Sans aucun argument, lehacher La commande affiche le contenu de cette table. Les entrées qui n'ont pas été examinées depuis le dernierCD les commandes sont marquées d'un astérisque; il est possible que ces entrées soient invalides.

Avec des arguments, lehacher commande supprime les commandes spécifiées de la table de hachage (sauf s’il s’agit de fonctions), puis les localise. Avec le -v option, hash imprime les emplacements des commandes au fur et à mesure de leur recherche. Le -r Cette option supprime toutes les entrées de la table de hachage à l’exception des fonctions.

jobid emploi

Imprimez les identifiants de processus du processus. Si la emploi L'argument est omis, le travail en cours est utilisé.

emplois

Cette commande répertorie tous les processus d'arrière-plan qui sont les enfants du processus shell en cours.

pwd

Imprimer le répertoire en cours. La commande intégrée peut différer du programme du même nom car elle rappelle le répertoire en cours plutôt que de la recalculer à chaque fois. Cela le rend plus rapide. Cependant, si le répertoire en cours est renommé, la version intégrée depwd continuera à imprimer l'ancien nom du répertoire.

lis-p rapide -r variable…

L'invite est imprimée si le -p L'option est spécifiée et l'entrée standard est un terminal. Ensuite, une ligne est lue à partir de l'entrée standard. La nouvelle ligne de fin est supprimée de la ligne et la ligne est divisée comme décrit dans la section sur la division de mots ci-dessus, et les éléments sont affectés aux variables dans l'ordre. Au moins une variable doit être spécifiée. S'il y a plus de pièces que de variables, les pièces restantes (ainsi que les caractères deIFS qui les séparent) sont affectés à la dernière variable. S'il y a plus de variables que d'éléments, la chaîne NULL est attribuée aux variables restantes. lelis builtin indiquera un succès sauf si EOF est rencontré en entrée, auquel cas un échec est renvoyé.

Par défaut, à moins que le -r Si l'option est spécifiée, la barre oblique inverse `` '' agit comme un caractère d'échappement, ce qui entraîne le traitement littéral du caractère suivant. Si une barre oblique inverse est suivie d'une nouvelle ligne, la barre oblique inverse et la nouvelle ligne seront supprimées.

lecture seulement prénom…

en lecture seule -p

Les noms spécifiés sont marqués en lecture seule, de sorte qu'ils ne peuvent pas être modifiés ou non définis ultérieurement. Le shell permet de définir la valeur d’une variable en même temps qu’elle est marquée en lecture seule par écriture.

en lecture seule nom = valeur

En l'absence d'argument, la commande readonly répertorie les noms de toutes les variables en lecture seule. Avec le -p option spécifiée, la sortie sera formatée de manière appropriée pour une utilisation non interactive.

ensemble { -options | + options | - arg …

leensemble La commande remplit trois fonctions différentes.

Sans argument, il répertorie les valeurs de toutes les variables du shell.

Si des options sont spécifiées, les options spécifiées sont définies ou supprimées, comme décrit dans la section intitulée Traitement de la liste d'arguments Sx.

La troisième utilisation de la commande set consiste à définir les valeurs des paramètres de position du shell sur les arguments spécifiés. Pour changer les paramètres de position sans changer aucune option, utilisez `` - '' comme premier argument à définir. Si aucun argument n'est présent, la commande set effacera tous les paramètres de position (ce qui équivaut à l'exécution de «shift $ #».

valeur variable

Attribue une valeur à la variable. (En général, il est préférable d'écrire variable = valeur plutôt que d'utilisersetvar setvarest destiné à être utilisé dans des fonctions qui attribuent des valeurs à des variables dont les noms sont passés en tant que paramètres.)

décalage n

Décalez les paramètres de position n fois. UNEdécalage définit la valeur de $1 à la valeur de $2 la valeur de $2 à la valeur de $3 et ainsi de suite, diminuant la valeur de $# par un. Si n est supérieur au nombre de paramètres de position,décalage émettra un message d'erreur et quittera avec le statut de retour 2.

fois

Imprimez les temps utilisateur et système cumulés pour le shell et les processus exécutés à partir du shell. Le statut de retour est 0.

piège action signal…

Permet au shell d’analyser et d’exécuter une action lorsque l’un des signaux spécifiés est reçu. Les signaux sont spécifiés par le numéro du signal. Si signal est0 l'action est exécutée à la sortie du shell. action peut être nul ou `` - '' le premier entraîne l'ignorance du signal spécifié et le second provoque l'action par défaut. Lorsque le shell supprime un sous-shell, il réinitialise les signaux capturés (mais non ignorés) à l'action par défaut. lepiège La commande n'a aucun effet sur les signaux ignorés à l'entrée du shell.

type prénom …

Interprétez chaque nom en tant que commande et imprimez la résolution de la recherche de commande. Les résolutions possibles sont les suivantes: mot-clé shell, alias, construit dans le shell, commande, alias suivi et introuvable. Pour les alias, l’extension d’alias est imprimée; pour les commandes et les alias suivis, le chemin complet de la commande est imprimé.

ulimit-H -S -un -tfdscmlpn valeur

Renseignez-vous sur les limites strictes ou souples des processus ou définissez-en de nouvelles.Le choix entre la limite stricte (qu'aucun processus ne peut être violé et que vous ne pouvez pas augmenter une fois abaissé) et la limite souple (qui provoque la signalisation des processus, mais pas nécessairement leur suppression, et qui peut être élevée) est effectué avec ces drapea