Bash Tutoriel
Démarrer avec Bash
Recherche…
Versions
Version | Date de sortie |
---|---|
0,99 | 1989-06-08 |
1,01 | 1989-06-23 |
2.0 | 1996-12-31 |
2,02 | 1998-04-20 |
2,03 | 1999-02-19 |
2,04 | 2001-03-21 |
2.05b | 2002-07-17 |
3.0 | 2004-08-03 |
3.1 | 2005-12-08 |
3.2 | 2006-10-11 |
4.0 | 2009-02-20 |
4.1 | 2009-12-31 |
4.2 | 2011-02-13 |
4.3 | 2014-02-26 |
4.4 | 2016-09-15 |
Bonjour tout le monde en utilisant des variables
Créez un nouveau fichier appelé hello.sh
avec le contenu suivant et attribuez-lui des droits exécutables avec chmod +x hello.sh
.
Exécuter / Exécuter via:
./hello.sh
#!/usr/bin/env bash
# Note that spaces cannot be used around the `=` assignment operator
whom_variable="World"
# Use printf to safely output the data
printf "Hello, %s\n" "$whom_variable"
#> Hello, World
Cela affichera Hello, World
sur la sortie standard lorsqu’elle sera exécutée.
Pour dire à bash où le script est, vous devez être très précis, en le pointant vers le répertoire contenant, normalement avec ./
s'il s'agit de votre répertoire de travail, où .
est un alias du répertoire en cours. Si vous ne spécifiez pas le répertoire, bash
essaie de localiser le script dans l'un des répertoires contenus dans la variable d'environnement $PATH
.
Le code suivant accepte un argument $1
, qui est le premier argument de la ligne de commande, et le renvoie dans une chaîne formatée, après Hello,
.
Exécuter / Exécuter via:
./hello.sh World
#!/usr/bin/env bash
printf "Hello, %s\n" "$1"
#> Hello, World
Il est important de noter que $1
doit être cité en double citation, et non en guichet unique. "$1"
développe comme le premier argument de la ligne de commande, tandis que '$1'
évalué à la chaîne littérale $1
.
Note de sécurité:
Lisez les implications de la sécurité en oubliant de citer une variable dans les shells bash pour comprendre l'importance de placer le texte variable entre guillemets.
Bonjour le monde
Shell interactif
Le shell Bash est couramment utilisé de manière interactive: il vous permet d'entrer et de modifier des commandes, puis de les exécuter lorsque vous appuyez sur la touche Retour . De nombreux systèmes d'exploitation basés sur Unix ou sur Unix utilisent Bash comme shell par défaut (notamment Linux et macOS). Le terminal entre automatiquement dans un processus interactif de shell Bash au démarrage.
Sortez Hello World
en tapant ce qui suit:
echo "Hello World"
#> Hello World # Output Example
Remarques
Vous pouvez changer le shell en tapant simplement le nom du shell dans le terminal. Par exemple:
sh
,bash
, etc.echo
est une commande intégrée Bash qui écrit les arguments reçus sur la sortie standard. Il ajoute une nouvelle ligne à la sortie, par défaut.
Shell non interactif
Le shell Bash peut également être exécuté de manière non interactive à partir d'un script, ce qui ne nécessite aucune interaction humaine. Le comportement interactif et le comportement par script doivent être identiques - une considération importante pour la conception du shell Unix V7 Bourne et de Bash de manière transitoire. Par conséquent, tout ce qui peut être fait sur la ligne de commande peut être placé dans un fichier script pour être réutilisé.
Suivez ces étapes pour créer un script Hello World
:
Créez un nouveau fichier appelé
hello-world.sh
touch hello-world.sh
Rendre le script exécutable en exécutant
chmod
+x hello-world.sh
Ajoutez ce code:
#!/bin/bash echo "Hello World"
Ligne 1 : La première ligne du script doit commencer par la séquence de caractères
#!
, appelé shebang 1 . Le shebang demande au système d'exploitation d'exécuter/bin/bash
, le shell Bash, en lui transmettant le chemin du script comme argument.Par exemple
/bin/bash hello-world.sh
Ligne 2 : Utilise la commande
echo
pour écrireHello World
sur la sortie standard.
Exécutez le script
hello-world.sh
partir de la ligne de commande en utilisant l'un des éléments suivants:-
./hello-world.sh
- le plus couramment utilisé et recommandé -
/bin/bash hello-world.sh
-
bash hello-world.sh
- en supposant que/bin
soit dans votre$PATH
-
sh hello-world.sh
-
Pour une utilisation en production réelle, vous devez omettre l’extension .sh
(ce qui est trompeur, car il s’agit d’un script Bash, et non d’un script sh
) et peut-être déplacer le fichier dans un répertoire de votre PATH
votre répertoire de travail actuel, tout comme une commande système telle que cat
ou ls
.
Les erreurs courantes incluent:
Oublier d'appliquer les droits d'exécution sur le fichier, c'est-à-dire
chmod +x hello-world.sh
, ce qui entraîne la sortie de./hello-world.sh: Permission denied
.Modifier le script sous Windows, ce qui produit des caractères de fin de ligne incorrects que Bash ne peut pas gérer.
Un symptôme courant est
: command not found
lorsque le retour chariot a forcé le curseur au début de la ligne, remplaçant le texte précédant les deux points dans le message d'erreur.Le script peut être corrigé à l'aide du programme
dos2unix
.Un exemple d'utilisation:
dos2unix hello-world.sh
dos2unix
édite le fichier en ligne.En utilisant
sh ./hello-world.sh
, ne réalisant pas quebash
etsh
sont des shells distincts avec des fonctionnalités distinctes (bien que Bash est rétro-compatible, l'erreur inverse est inoffensive).Quoi qu'il en soit, il est préférable d'utiliser la ligne shebang du script plutôt que d'écrire explicitement
bash
oush
(oupython
ouperl
ouawk
ouruby
ou ...) avant le nom de fichier de chaque script.Une ligne de shebang commune à utiliser pour rendre votre script plus portable consiste à utiliser
#!/usr/bin/env bash
au lieu de coder en dur un chemin vers Bash. De cette façon,/usr/bin/env
doit exister, mais au-delà,bash
doit simplement être sur votrePATH
. Sur de nombreux systèmes,/bin/bash
n'existe pas et vous devez utiliser/usr/local/bin/bash
ou un autre chemin absolu; Ce changement évite de devoir en comprendre les détails.
1 Également appelé sha-bang, hashbang, pound-bang, hash-pling.
Affichage des informations sur les éléments intégrés Bash
help <command>
Cela affichera la page d'aide Bash (manuelle) pour le intégré spécifié.
Par exemple, help unset
affichera:
unset: unset [-f] [-v] [-n] [name ...] Unset values and attributes of shell variables and functions. For each NAME, remove the corresponding variable or function. Options: -f treat each NAME as a shell function -v treat each NAME as a shell variable -n treat each NAME as a name reference and unset the variable itself rather than the variable it references Without options, unset first tries to unset a variable, and if that fails, tries to unset a function. Some variables cannot be unset; also see `readonly'. Exit Status: Returns success unless an invalid option is given or a NAME is read-only.
Pour voir une liste de tous les éléments intégrés avec une courte description, utilisez
help -d
Bonjour tout le monde avec entrée utilisateur
Ce qui suit invitera l'utilisateur à saisir des données, puis stockera cette entrée sous forme de chaîne (texte) dans une variable. La variable est ensuite utilisée pour donner un message à l'utilisateur.
#!/usr/bin/env bash
echo "Who are you?"
read name
echo "Hello, $name."
La commande read
here lit une ligne de données de l'entrée standard dans le name
la variable. Ceci est ensuite référencé en utilisant $name
et imprimé en standard avec echo
.
Exemple de sortie:
$ ./hello_world.sh
Who are you?
Matt
Hello, Matt.
Ici, l'utilisateur a entré le nom "Matt", et ce code a été utilisé pour dire Hello, Matt.
.
Et si vous souhaitez ajouter quelque chose à la valeur de la variable lors de son impression, utilisez des accolades autour du nom de la variable, comme illustré dans l'exemple suivant:
#!/usr/bin/env bash
echo "What are you doing?"
read action
echo "You are ${action}ing."
Exemple de sortie:
$ ./hello_world.sh
What are you doing?
Sleep
You are Sleeping.
Ici, lorsque l'utilisateur entre une action, "ing" est ajouté à cette action lors de l'impression.
Gestion des arguments nommés
#!/bin/bash
deploy=false
uglify=false
while (( $# > 1 )); do case $1 in
--deploy) deploy="$2";;
--uglify) uglify="$2";;
*) break;
esac; shift 2
done
$deploy && echo "will deploy... deploy = $deploy"
$uglify && echo "will uglify... uglify = $uglify"
# how to run
# chmod +x script.sh
# ./script.sh --deploy true --uglify false
Bonjour tout le monde en mode "Debug"
$ cat hello.sh
#!/bin/bash
echo "Hello World"
$ bash -x hello.sh
+ echo Hello World
Hello World
L'argument -x
vous permet de parcourir chaque ligne du script. Un bon exemple est ici:
$ cat hello.sh
#!/bin/bash
echo "Hello World\n"
adding_string_to_number="s"
v=$(expr 5 + $adding_string_to_number)
$ ./hello.sh
Hello World
expr: non-integer argument
L'erreur suggérée ci-dessus n'est pas suffisante pour tracer le script; Cependant, l'utilisation de la méthode suivante vous permet de mieux détecter l'erreur dans le script.
$ bash -x hello.sh
+ echo Hello World\n
Hello World
+ adding_string_to_number=s
+ expr 5 + s
expr: non-integer argument
+ v=
Importance de citer dans les chaînes
La citation est importante pour l'expansion des chaînes en bash. Avec ceux-ci, vous pouvez contrôler la façon dont le bash analyse et développe vos chaînes.
Il existe deux types de devis:
- Faible : utilise des guillemets doubles: "
- Fort : utilise des guillemets simples: '
Si vous voulez vous baser pour développer votre argument, vous pouvez utiliser Weak Quoting :
#!/usr/bin/env bash
world="World"
echo "Hello $world"
#> Hello World
Si vous ne voulez pas étendre votre argument, vous pouvez utiliser Strong Quoting :
#!/usr/bin/env bash
world="World"
echo 'Hello $world'
#> Hello $world
Vous pouvez également utiliser la commande escape pour empêcher l'expansion:
#!/usr/bin/env bash
world="World"
echo "Hello \$world"
#> Hello $world
Pour des informations plus détaillées que les détails du débutant, vous pouvez continuer à le lire ici .