Comment exécuter des commandes à partir d'un script shell

How Execute Commands From Within Shell Script



Dans bash, l'exécution de commandes à partir d'un script shell peut être un peu intimidante au début et peut nécessiter un acte de foi. Après tout, les commandes exécutées dans un script bash ne sont pas interactives. Ici, nous poserons les bases pour exécuter des commandes à partir d'un script shell en répondant aux questions suivantes sur les commandes : D'où viennent-elles ? Que sont-ils? Comment les utilisons-nous dans un script ?

D'où viennent les commandes ?

Les commandes dans bash proviennent de l'une des catégories suivantes :







Bash lui-même (voir les éléments intégrés)

Bash est livré avec son propre ensemble de commandes pour permettre l'accès à ses fonctionnalités intégrées telles que la déclaration de tableaux, la lecture de lignes à partir d'un fichier et d'autres fonctionnalités intégrées à bash. Nous appelons les commandes de cette catégorie, commandes intégrées bash ou commandes intégrées en abrégé.



Exécutables dans votre environnement (voir commandes externes)

Par défaut, bash héritera de certaines variables par défaut. Ceci est observé dans le cas de la variable PATH incluant les emplacements des exécutables référencés en tant que commandes externes dans bash. C'est-à-dire que si le boucle se trouve dans votre chemin, elle peut être exécutée à partir d'un script bash de la même manière qu'en mode interactif. Nous appelons commandes de cette catégorie, commandes externes, ou commandes en abrégé.



Fonction définie par l'utilisateur (voir fonctions)

Avant d'exécuter des commandes externes et des commandes intégrées, bash vérifie si une fonction est définie. Si c'est le cas, la fonction est exécutée comme une commande. Si ce n'est pas le cas, il descend dans l'ordre de priorité des commandes. Afin d'exécuter une fonction définie en dehors d'un script, ils doivent être déclarés avec l'attribut -x ; sinon, ils peuvent être inclus à l'aide de l'extension . Commander. Nous appelons les commandes de cette catégorie des fonctions définies par l'utilisateur ou des fonctions en abrégé.





Que sont les commandes

Une commande est n'importe quel mot à traiter comme un point d'entrée unique d'un programme dans l'environnement shell. Dans le cas où la commande est exécutée, la commande elle-même et les arguments optionnels sont passés en paramètres positionnels, ${0}, ${1}, ${2}, … Le zéroième paramètre positionnel (${0}) désigne le commande elle-même et reste inchangée dans son contexte. Autrement dit, contrairement aux paramètres positionnels dans les fonctions, ${1}, ${2}, … qui peuvent changer en fonction du contexte, ${0} est inchangé entre les appels de fonction.

Les commandes sont étendues en fonction de l'emplacement de la déclaration et des attributs attribués comme globaux, intégrés à bash ou locaux à votre programme bash.



Voici une liste de types de commandes à connaître.

Commandes intégrées

Ce sont des citoyens de première classe de l'univers bash, y compris des caractères tels que '.' ':' '[' ]' et des mots réservés comme déclarer dans bash . Vous comptez sur ces commandes, contenues dans la liste des commandes intégrées de bash, pour être disponibles à utiliser dans votre script bash.

Selon la désignation et le numéro de version de votre interpréteur bash, certaines commandes peuvent ne pas être disponibles.

Commandes externes

Les commandes externes sont des exécutables accessibles en dehors d'un script bash comme curl. Contrairement aux fonctions, les commandes externes ne sont pas stockées en tant que variables.

Plus la priorité d'un type de commande est faible, plus la commande peut être interprétée tardivement. Les commandes externes ont l'ordre de priorité le plus bas dans bash. C'est avant d'exécuter une commande externe, l'interpréteur bash recherchera des fonctions, puis des fonctions intégrées, et essaiera enfin de voir si une commande existe en externe. Sinon, vous devriez voir l'erreur suivante.

bash : commande inconnue :commanderpas trouvé

Dans un script bash, les fonctions peuvent remplacer le comportement des commandes externes si elles partagent le même nom, comme nous l'avons vu précédemment dans les exemples curl bash . Voici un exemple de commande externe personnalisée utilisant une fonction.

boucle() {
commander ${FUNCNAME}...
}

Cela fonctionne parce que les fonctions ont une priorité plus élevée que les commandes externes et même les commandes intégrées bash. La limitation concerne les caractères autorisés dans un nom de fonction.

Notez que l'exemple ci-dessus peut être accompli en utilisant un alias comme suit.

alias boucle= '
{
boucler...
}
'

Dans le cas des alias, le type de commande peut différer selon le contexte d'exécution, alors que dans le cas des commandes externes personnalisées utilisant la méthode fonction, le point d'entrée est toujours une fonction.

Les fonctions

Règle de fonctions dans bash. Avant de regarder les commandes intégrées et externes, bash vérifie si une fonction définie par un nom de fonction candidate, le premier mot apparaissant sur une ligne ou après le ; caractère désignant la fin d'une ligne de commande. La seule exception concerne les variables bash écrites en majuscules telles que ${FUNCNAME}.

alias() { NOM DE FONCTION=asdf ;chassèrent $ {@ ,,};}
alias boucle='TEST CURL ALIAS' # ?

Commandes simples

Les commandes simples sont définies dans les pages de manuel de bash sous la forme d'un mot suivi d'arguments facultatifs. Dans le contexte, une commande simple peut être une commande intégrée, externe ou une fonction.

Comment exécuter des commandes à partir d'un script bash

Maintenant que nous savons quels types de commandes sont disponibles, nous pouvons expliquer comment les utiliser dans vos scripts. Tout d'abord, nous devrons savoir comment fonctionne la priorité des commandes dans bash.

Voici quelques façons de contrôler la priorité dans un script bash.

Laissez bash décider

nom_commande

Pour la plupart, surtout au début, nous laissons simplement bash décider quelle commande utiliser. Cependant, il existe des cas où votre intention peut ne pas être interprétée correctement par bash. C'est le cas lorsque les noms de fonctions et les commandes externes ou intégrées se chevauchent.

Exécuter une commande externe

commandernom_commande

Supposons qu'il existe une commande externe nom_commande disponible en mode interactif et que vous souhaitez l'utiliser dans un script bash. Nous pouvons explicitement dire à bash que command_name est une commande externe en utilisant la commande intégrée.

Exemples de commandes externes

Exemples de commandes externes en supposant que les éléments suivants sont installés :

déposer
aller
figlet
Exemple : Obtenir le type de fichier et les informations
{ # obtenir le type de fichier et les informations
déposer ${infile} # (1,2)
}
# (1) commande, fichier
# (2) infile={Chemin vers le fichier}
Exemple : Stage modifié et nouveaux fichiers dans git
{ # fichiers d'étape dans git
git ajouter.# (1)
}
# (1) commande, git
Exemple : Créer un art ascii à l'aide de figlet
{ # créer de l'art ascii
figlet${message} # (1,2)
}
# (1) commande, figlet
# (2) message={Message à afficher en ascii art}

Exécuter une commande intégrée

intégrénom_commande

Supposons que command_name soit l'une des commandes définies en tant que commande intégrée dans bash. Pour faire savoir à bash que nous voulons exécuter command_name en tant qu'élément intégré, nous utilisons l'élément intégré intégré.

Exemples de commandes intégrées
Exemple : Combien de fonctions intégrées ?
intégré{,}{,,}{,,,} # combien de fonctions intégrées ?
Exemple : déclaration fantôme
{
déclarer() { chassèrentOups!;}
déclarer–xfdéclarer # ?
}

Conclusion

Il est assez facile d'exécuter une commande à partir d'un script shell bash. Il existe trois principaux types de commandes. Savoir comment les commandes simples sont interprétées dans bash peut conduire à un meilleur contrôle sur le type de commande exécuté au moment de l'exécution.