[LINUX] Essayons un script shell

J'ai surmonté Linux, les commandes, les shells et ce genre d'amertume! !! Dans cet article, je présenterai les sites auxquels j'ai fait référence et compléterai mes questions et interprétations. J'espère que cet article aidera ceux qui pensent "Je me demande si je devrais l'essayer" ou "J'ai peur de l'écran noir".

Qu'est-ce qu'un script shell?

Ceci est expliqué à divers endroits, mais en un mot, dans mon interprétation, c'est un ** programme qui rassemble des instructions pour le PC **.

Par exemple, lorsque vous souhaitez renommer un fichier. Lorsque vous souhaitez unifier la fluctuation des mots «test» et «test» de plusieurs noms de fichiers, spécifiez le fichier ou le répertoire et renommez-le immédiatement. Et.

Comme autre exemple, je veux créer un fichier journal des commandes exécutées chaque jour (il semble être en cours de journalisation). Et. ... Eh bien, n'est-ce pas un processus par lots? ?? J'ai réfléchi et enquêté. → https://wa3.i-3-i.info/word11221.html Apparemment, les scripts shell et les fichiers batch ont le même rôle, seul le monde de base est différent.

Comment créer et exécuter un script

Pour macOS, il peut être exécuté à partir du terminal sans créer d'environnement, mais pour Windows, une préparation est nécessaire. Essayez google avec "Windows Linux" etc.: Bow_tone1:

J'ai fait référence à la méthode de création de script et à la méthode d'exécution suivantes ↓ https://udemy.benesse.co.jp/development/web/shellscript.html

L'éditeur utilise ** Vi **, mais vous devriez pouvoir utiliser presque tout avec un éditeur de texte. Récemment, ** Vim **, qui est une version évoluée de Vi, semble être populaire. Si vous définissez Vi et Vim, vous pouvez coder le code en couleur, mais cette fois je l'omettrai. VS Code le code automatiquement par couleur pour une visualisation facile. amical.

À propos de l'autorité

Tous les fichiers et dossiers ont des autorisations. Il peut être configuré pour éviter des accidents tels que l'exécution accidentelle du shell ou la possibilité de modifier la source de production ou le fichier de configuration. Vous pouvez vérifier les permissions avec ls -l.

$ ls -l
total 13784
drwxr-xr-x  4 aaaaaayyymmm  staff     128  3 20 15:19 memo
drwxr-xr-x  7 aaaaaayyymmm  staff     224  3 29 23:52 tmp
-rw-------  1 aaaaaayyymmm  staff  124987  3 30 11:51 Archives.zip
-rw-r--r--  1 aaaaaayyymmm  staff  197519  3 31 16:00 capture d'écran.png
-rw-r--r--  1 aaaaaayyymmm  staff      17  3 31 16:55 hello.sh

La signification de chaque élément est la suivante.

Type de fichier Autorité Nombre de liens physiques propriétaire groupe Taille d'octet Horodatage nom de fichier
-(Première partie de personnage) rw-r--r-- 1 aaaaaayyymmm staff 17 3 31 16:55 hello.sh

Cette fois, nous allons nous concentrer sur les ** types de fichiers ** et les ** autorisations **. Il existe trois types de types de fichiers comme suit.

type sens Supplément
- Fichier ---
d annuaire La même chose que le dossier que vous voyez dans l'interface graphique
l Lien symbolique Des choses comme des raccourcis. Fichiers proxy capables de lire et d'écrire de vrais fichiers et répertoires

La vue d'autorité indique l'autorité de l'utilisateur ** propriétaire **, ** groupe **, ** autre **, séparés par trois à partir de la gauche. Et les types d'autorité sont les suivants.

Autorité Notation numérique sens
r 4 en train de lire
w 2 Éditer
x 1 Courir
- Aucun Aucune autorité

Comment accorder une autorité

Il existe deux manières principales d'écrire.

Désignation du numéro ver.Exemple


$ chmod 744 hello.sh

Désignation de l'alphabet ver.Exemple


$ chmod g+wx hello.sh
//Ou
$ chmod u=x,g=rwx,o=- hello.sh

J'ai fait référence à cet article. Si vous souhaitez en savoir plus, reportez-vous à ce qui suit. https://qiita.com/shisama/items/5f4c4fa768642aad9e06

La valeur par défaut est -rw-r - r -. Pour exécuter le script après sa création, vous devez accorder le droit d'exécution comme suit. (L'autorité par défaut peut être modifiée, mais cette fois, elle ne sera pas gérée.)

$ chmod u+x hello.sh

Découvrez les bases du script shell

J'ai appris ce qui suit ↓ http://motw.mods.jp/shellscript/tutorial.html

Comment se souvenir des opérateurs de comparaison

Je comprends -eq, mais je veux utiliser -gt et -le rapidement, mais c'est difficile à retenir. .. .. Connaître l'anglais, c'est un peu plus facile à retenir!

opérateur Anglais sens
eq equal x = y
ge greater than or equal to x >= y
gt greater than x > y
le less than or equal to x <= y
lt less than x < y
ne not equal x != y

Faisons un script pratique

Partie 1: Renommez tous les noms de fichiers à la fois

J'ai renvoyé au site suivant http://motw.mods.jp/shellscript/rename.html

Partie 2: Copiez des fichiers et des dossiers dans le dossier de sauvegarde

J'y ai pensé moi-même et je l'ai créé.

make_bk.sh


#!/bin/bash
read -p "Entrez le nom du fichier ou le nom du dossier que vous souhaitez sauvegarder:" ary
echo $ary

#S'il n'y a pas de valeur d'entrée, un message d'erreur s'affiche et le processus se termine.
if [ -z $ary ];
then
  echo "Entrez le nom du fichier ou le nom du dossier que vous souhaitez sauvegarder"
  exit 1
fi

#Créez un dossier de sauvegarde.-Avec l'option p, un nouveau dossier est créé uniquement lorsque le dossier n'existe pas.
bkdir=bk_$(date +%Y%m%d)
mkdir -p $bkdir

#Lisez les fichiers ou dossiers entrés un par un
for target in ${ary[@]}
do
  #Faites une copie et stockez-la dans le dossier de sauvegarde
  [ -d $target ] && cp -r $target $bkdir/$target || cp $target $bkdir/$target
done

Ce script ne limite pas le nombre de fichiers et de dossiers, j'ai donc utilisé un tableau lors de l'acceptation de l'entrée. Pour savoir comment utiliser la baie, reportez-vous à ce qui suit. https://www.atmarkit.co.jp/ait/articles/1905/22/news004.html

À propos des pièces suivantes.

[ -d $target ] && cp -r $target $bkdir/$target || cp $target $bkdir/$target

Avec la commande cp, l'option "-r" est requise lors de la copie d'un dossier (= répertoire), donc la commande cp est exécutée après avoir déterminé si $ target est un répertoire. Je vous serais reconnaissant de bien vouloir me dire s’il existe un autre bon moyen.

Courons

Avant cela, donnez le droit d'exécution.

$ chmod u+x make_bk.sh

Structure des dossiers avant exécution


 tmp
  ├── make_bk.sh
  └── test.txt   //Copiez ce gars

je le ferai

$ make_bk.sh
Entrez le nom du fichier ou le nom du dossier que vous souhaitez sauvegarder:test.txt
test.txt

Structure des dossiers après exécution


 tmp
  ├── bk_20200329   //Dossier nouvellement créé
  │   └── test.txt  //Fichier copié
  ├── make_bk.sh
  └── test.txt

:blush:

prochain, Copie et sauvegarde pour chaque dossier Si un dossier existe, copiez simplement la cible Assure-toi.

Structure des dossiers avant exécution


 tmp
  ├── bk_20200329
  │   └── test.txt
  ├── make_bk.sh
  ├── test.txt
  └── test2   //Copiez ce gars
      └── test2.txt  //Doit être copié en même temps

je le ferai

$ make_bk.sh
Entrez le nom du fichier ou le nom du dossier que vous souhaitez sauvegarder:test2
test2

Structure des dossiers après exécution


 tmp
  ├── bk_20200329
  │   ├── test.txt
  │   └── test2          //Dossier copié
  │       └── test2.txt  //Fichiers copiés ensemble
  ├── make_bk.sh
  ├── test.txt
  └── test2
      └── test2.txt

:blush::blush::blush:

Bonus: commandes Linux pratiques

Ceci est un mémo de la commande que j'ai pensé "c'est pratique et semble être utilisé" pendant l'apprentissage. ◆ Je souhaite afficher la date et l'heure lors de l'exécution de la commande d'historique Référence: https://linuxfan.info/add-datetime-to-history ◆ Je souhaite enregistrer des journaux de travail Référence: https://dev.classmethod.jp/articles/scriptcommand/

en conclusion

Vous devriez avoir compris les bases! Je vais tout essayer. Le but de cette fois était de s'habituer au script, donc je ne peux pas dire que l'aspect pratique du script créé soit remis en question. Au fur et à mesure que je travaille à partir de maintenant, je sens que je peux y arriver quand je pense "Je veux automatiser ça" et "Je peux assembler cette commande!?", Donc j'ai hâte de voir le moment à venir ... Dans la prochaine étape, nous étudierons afin de pouvoir prêter attention à la vitesse d'exécution et à la réutilisabilité ...!

Recommended Posts

Essayons un script shell
Essayez de programmer avec un shell!
Principes de base du script Shell # 2
[Ubuntu] Comment exécuter un script shell
Gérez les générations de rotation des journaux avec un script shell.
Créer un script shell pour écrire un journal
Lançons le script Bash en Java
Afficher les prévisions météorologiques du jour avec le script shell
Lancez le shell pendant que le script Python est en cours d'exécution
Écrivons un script de confirmation ping de manière appropriée
Essayez de créer un problème FizzBuzz avec un programme shell
Remplacer la commande dans le script shell
Script Shell @ mémo d'étude
Script Shell pour mettre Webmin dans Alpine Linux
[Piyopiyokai # 1] Jouons avec Lambda: création d'un script Python
Comprenons ensemble les entrées / sorties standard de bash et écrivons un script shell.
Script shell qui numérote les noms en double lors de la création de fichiers
Comment exécuter un programme Python à partir d'un script shell
[Python, script shell, développement d'équipe] Créez un dépôt Git astucieux
[Linux] Copie des données de Linux vers Windows avec un script shell
Créons un script qui s'enregistre avec Ideone.com en Python.
Traitez les fichiers du dossier dans l'ordre avec le script shell
Essayez de dessiner une fonction logistique
Je n'oublierai jamais comment écrire un script shell, n'oubliez pas! !!
[Linux] Ecrire un outil de déploiement à l'aide de rsync avec un script shell
Essayez de sélectionner une langue
Traitez le contenu du fichier dans l'ordre avec un script shell
Essayons l'analyse! Chapitre 1: Utilisation de la technologie analytique - du point de vue commercial -
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
Exécuter un script multiligne dans un PDB
Faisons une rumba distante [Matériel]
Notes de syntaxe de base pour le script shell
Essayez de dessiner une courbe de Bézier
J'ai créé un script de traduction basé sur CUI (2)
Faisons une interface graphique avec python.
Faisons un service de vente au comptant 2
Faisons une rupture de bloc avec wxPython
Peut-être que ça marche! Essayons de gratter!
Faisons un service de vente au comptant 1
Essayons Fizz Buzz avec Python
Un petit script pour l'autodéfense des logiciels malveillants
Automatisez la construction d'environnement avec ShellScript
Faisons un graphe avec python! !!
Faisons un spacon avec xCAT
Lancer le script Python en service
Faisons un service de vente au comptant 3
Commande bc de calcul numérique de script shell
Ecrire un script batch avec Python3.5 ~
Grands Pandas Apprenons beaucoup
Un script shell pour se souvenir à nouveau du shell pipenv