Le script Shell est pratique, n'est-ce pas? Mais ** j'oublie comment l'écrire ** Je suis paresseux de demander à Google Sensei commande par commande, je vais donc résumer comment l'écrire.
L'art de la coquille n'est pas un article de niveau, mais bon, c'est un article utile si vous écrivez un petit script. peut être.
C'est une entrée décalée et désordonnée, mais ne vous inquiétez pas.
A partir de maintenant, j'écrirai sur la syntaxe de base des scripts shell. Syntaxe sérieusement basique.
C'est facile à oublier, mais donnons d'abord autorité. Si vous ne le faites pas, vous ne pouvez pas le faire.
(*'~') $ touch sample.sh
(*'~') $ chmod +x ./sample.sh
N'oubliez pas de mettre la déclaration sur la première ligne * c'est un script shell *. Il n'y a pas de différence entre sh et bash, donc bash semble aller bien.
#!/bin/bash
Vous voulez connaître le commentaire. Eh bien, ajoutez simplement «#» au début.
(*'~') $ cat sample.sh
#!/bin/bash
# echo "not display"
echo "display"
(*'~') $ ./sample.sh
display
Je vais résumer comment écrire des arguments et des variables
C'est rapide à écrire et à se souvenir. Comment prendre l'argument peut être pris comme le script suivant. Cela signifie que c'est une variable avec «$».
(*'~') $ cat sample.sh
#!/bin/bash
echo $#
echo $@
echo "$@"
echo $*
echo "$*"
echo $0
echo $1
echo $2
echo $9
Si vous donnez un argument à titre d'essai, cela ressemblera à ceci.
(*'~') $ ./sample.sh hoge 1
2
hoge 1
hoge 1
hoge 1
hoge 1
./sample.sh
hoge
1
(*'~') $
La description
--$ #
: Nombre d'arguments passés au script
--$ @
: Tous les arguments passés au script.
--$ *
: Tous les arguments passés au script. Identique à «$ @» sauf s'il est entouré d'un double revêtement.
-- $ 0
: Le nom du script en cours d'exécution.
-- $ n
: le nième argument passé au script. Renvoie un caractère vide lorsque la plage de l'argument donné est dépassée. Le 10ème argument et les suivants ne peuvent être développés que s'ils sont décrits comme «$ {n}».
Si vous ne le placez pas avec une double prudence, c'est la même chose que $ @
, mais si vous le placez, il y a une différence entre la sortie pour chaque argument ou la sortie avec un argument comme indiqué ci-dessous.
(*'~') $ cat sample.sh
#!/bin/bash
for arg in "$@"
do
echo $arg
done
for arg in "$*"
do
echo $arg
done
(*'~') $ ./sample.sh hoge foo 1
hoge
foo
1
hoge foo 1
Je l'ai déjà écrit comme argument, mais quand je fais référence à une variable, «$» est ajouté. Ne pas ajouter lors de la définition.
Notez également que ** lors de la définition d'une variable, ne mettez pas d'espaces à gauche et à droite de =
**. Connectons-nous et écrivons.
(*'~') $ cat ./sample.sh
#!/bin/bash
hoge="This is Hoge"
echo $hoge
(*'~') $ ./sample.sh
This is Hoge
Développez les variables dans une chaîne. Écrivez simplement les variables en double revêtement.
(*'~') $ cat ./sample.sh
#!/bin/bash
hoge="This is Hoge"
echo "What is this? $hoge"
(*'~') $ ./sample.sh
What is this? This is Hoge
Le résultat de l'exécution de la commande peut être stocké dans une variable. Décrivez la commande que vous souhaitez exécuter dans $ ()
.
(*'~') $ cat ./sample.sh
#!/bin/bash
hoge=$(echo "This is Hoge")
echo "What is this? $hoge"
(*'~') $ ./sample.sh
What is this? This is Hoge
Comme je l'ai écrit un peu plus tôt, je décrirai comment écrire des déclarations if, for et case.
Je vais certainement l'utiliser. J'ai une petite habitude.
Il existe des opérateurs de comparaison tels que -n
et -z
, mais c'est assez déroutant, donc je pense qu'il est plus facile de faire des comparaisons comme"" = "$ hoge"
.
À propos, ** Assurez-vous de placer la variable en double couche et de la comparer comme une chaîne de caractères **
(*'~') $ cat sample.sh
#!/bin/bash
if [ "" = "$1" ]; then
echo "params not given"
fi
if [ "" != "$1" ]; then
echo "params given $1"
fi
(*'~') $ ./sample.sh
params not given
(*'~') $ ./sample.sh hoge
params given hoge
if ~ else
C'est une autre syntaxe fréquemment utilisée. J'oublie «elif» à chaque fois.
(*'~') $ cat sample.sh
#!/bin/bash
if [ "hoge" = "$1" ]; then
echo "params is hoge"
elif [ "foo" = "$1" ]; then
echo "params is foo"
else
echo "params are not hoge or foo"
fi
(*'~') $ ./sample.sh hoge
params is hoge
(*'~') $ ./sample.sh foo
params is foo
(*'~') $ ./sample.sh other
params are not hoge or foo
for
Je l'ai fait un peu plus tôt
(*'~') $ cat sample.sh
#!/bin/bash
for arg in "$@"
do
echo $arg
done
(*'~') $ ./sample.sh hoge foo 1
hoge
foo
1
case
Je l'utilise sobrement
(*'~') $ cat sample.sh
#!/bin/bash
case "$1" in
hoge)
echo "params is hoge"
;;
foo)
echo "params is foo"
;;
*)
echo "params are not hoge or foo"
;;
esac
(*'~') $ ./sample.sh hoge
params is hoge
(*'~') $ ./sample.sh foo
params is foo
(*'~') $ ./sample.sh other
params are not hoge or foo
Voici un document sobre et pratique. Bien sûr, vous pouvez l'utiliser dans le shell. Si vous entourez la première pièce EOS avec une seule précaution, la variable ne sera pas développée. À propos, EOS peut être n'importe quoi tant que les premier et dernier caractères sont alignés. Par convention, si toutes les lettres majuscules.
(*'~') $ cat sample.sh
#!/bin/bash
cat << EOS
you can discribe multiple lines.
$1
EOS
cat << 'EOS'
$1
EOS
(*'~') $ ./sample.sh hoge
you can discribe multiple lines.
hoge
$1
Donnez un numéro à la commande exit pour terminer le script prématurément. «0» est une terminaison normale et «1» est une terminaison anormale. Il est principalement utilisé pour arrêter le traitement lorsqu'il n'y a pas assez d'arguments.
(*'~') $ cat sample.sh
#!/bin/bash
case "$1" in
0)
echo "success"
exit 0
;;
*)
echo "error"
exit 1
;;
esac
echo "can't reach"
(*'~') $ ./sample.sh 0
success
(*'~') $ ./sample.sh 1
error
Que diriez-vous quelque chose comme ça?
Je n'ai pas trouvé une entrée systématiquement décrite (probablement pas facile à trouver), alors je l'ai écrite. Après tout, j'ai l'impression de comprendre quelque chose quand je l'écris moi-même.
Nous ajouterons une version avancée à une date ultérieure.