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:" < > >| << >> <& >& <<- <>
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. 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. 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). 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. 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. 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. 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. Si une commande simple a été reconnue, le shell effectue les actions suivantes: 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. 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. 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. 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". 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: Les noms de commande contenant une barre oblique sont simplement exécutés sans effectuer de recherche. 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. 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: Sauf indication contraire, l'état de sortie d'une commande est celui de la dernière commande simple exécutée par la commande. 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 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é). 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 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. `` && '' 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é. 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 `` ''. 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. 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. 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. 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 @ 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: Expansion Tilde, Expansion Paramètre, Substitution de Commande, Expansion Arithmétique (elles se produisent toutes en même temps). La division de champ est effectuée sur les champs générés à l'étape (1), sauf siIFS la variable est nulle. Pathname Expansion (sauf si défini -F est en vigueur). 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. 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). 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: L'extension de chemin d'accès n'est pas effectuée sur les résultats de l'extension. 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 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. 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. À 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). 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é. 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
Citant
Barre oblique inverse
Guillemets simples
Double citation
Mots réservés
Alias
Les commandes
Commandes simples
Recherche et exécution
Recherche de chemin
Commandes complexes
Pipelines
Commandes de fond -
Listes - En général
Opérateurs de liste de court-circuit
Flow-Control Constructs - si, tant que, pour, cas
Regroupement des commandes
Variables et paramètres
Paramètres de position
Paramètres spéciaux
Expansion de tilde (substitution du répertoire de base d'un utilisateur)
Paramètre Expansion
Expansion arithmétique
Division en espaces blancs (division de champs)
Extension du chemin d'accès (génération du nom de fichier)
Patterns Shell
Builtins