[LINUX] Je n'oublierai jamais comment écrire un script shell, n'oubliez pas! !!

Qu'est-ce que c'est

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.

Basiques

A partir de maintenant, j'écrirai sur la syntaxe de base des scripts shell. Syntaxe sérieusement basique.

Autorisation d'exécution

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

Déclaration

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

Commenter

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

argument

Je vais résumer comment écrire des arguments et des variables

Comment prendre des arguments

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}».

Différence entre «$ @» et «$ *»

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

variable

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

Expansion variable

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

Résultat de l'exécution de la commande

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

Branche conditionnelle

Comme je l'ai écrit un peu plus tôt, je décrirai comment écrire des déclarations if, for et case.

Instruction ʻIf`

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

Déclaration 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

Déclaration 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

Ici document

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

Terminer le traitement

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

Résumé

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.

Recommended Posts

Je n'oublierai jamais comment écrire un script shell, n'oubliez pas! !!
[Ubuntu] Comment exécuter un script shell
Créer un script shell pour écrire un journal
Un script shell pour se souvenir à nouveau du shell pipenv
Qiita (1) Comment écrire un nom de code
Comment exécuter des scripts Maya Python
Un mémorandum sur la façon d'écrire des pandas que j'ai tendance à oublier personnellement
Comment écrire une instruction ShellScript Bash for
Comment se souvenir quand on oublie un mot
Ecrire un script pour convertir un vidage MySQL en TSV
Comment écrire un document tuple nommé en 2020
[Go] Comment écrire ou appeler une fonction
Écrivons un script de confirmation ping de manière appropriée
Comment écrire une instruction de cas bash ShellScript
Comment écrire une interface graphique à l'aide de la commande maya
Comment écrire un type liste / dictionnaire de Python3
[Python] Comment écrire une docstring conforme à PEP8
Comment créer un simple script serveur / client TCP
XPath Basics (2) - Comment écrire XPath
[Linux] Copie des données de Linux vers Windows avec un script shell
Comment appeler une fonction
Essayons un script shell
Comment rédiger un test de traitement utilisant BigQuery
Comment pirater un terminal
Comment écrire une classe méta qui prend en charge à la fois python2 et python3
[Linux] Ecrire un outil de déploiement à l'aide de rsync avec un script shell
Écrivez un script dans Shell et Python pour vous avertir dans Slack lorsque le processus est terminé
Comment passer des arguments à un script Python dans SPSS Modeler Batch
Branche conditionnelle en raison de l'existence d'un fichier de script shell
Créez un script shell pour exécuter le fichier python plusieurs fois
Écrivez un script pour calculer la distance avec le système Elasticsearch 5 sans douleur
Comment écrire une docstring pour créer un document tuple nommé avec sphinx
Comment faire une traduction japonais-anglais
Comment mettre un lien symbolique
Comment écrire sobrement avec des pandas
Réutilisation du flacon Comment écrire du HTML
Comment créer un bot slack
Comment créer un package Conda
Écrire la sortie standard dans un fichier
Comment créer un robot - Avancé
Comment créer une fonction récursive
Comment créer un Dockerfile (basique)
[Blender] Comment créer un plug-in Blender
Comment supprimer un conteneur Docker
Comment écrire une image de base Docker
Comment écrire un fichier wsgi.py indépendant de l'environnement Django1.9
Comment créer un robot - Basic
Remarques sur la rédaction de requirements.txt
Comment créer un fichier de configuration
Ecrire un script batch avec Python3.5 ~
Réfléchissez à la façon d'écrire un filtre avec les versions Shotgun API-Contact
Comment écrire une chaîne de caractères lorsqu'il y a plusieurs lignes en python
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
[Blender] Comment définir shape_key avec un script
Comment créer un clone depuis Github
Comment créer un environnement de traduction sphinx
Comment créer un dossier git clone
Comment définir optuna (comment écrire un espace de recherche)