Spécifications et variables de programmation de scripts Shell
Répertoire d'articles
- Spécifications et variables de programmation de scripts Shell
-
- 1. Présentation du script Shell
- Deux, écrivez un script shell
-
- 1. Ecrire le code de script
- 2. Accordez des autorisations exécutables
- 3. Exécutez le fichier de script
-
- 1) Méthode 1: La commande pour spécifier le chemin nécessite que le fichier ait l'autorisation x. (Chemin absolu et chemin relatif)
- 2) Méthode 2: spécifiez Shell pour interpréter le script, et le fichier ne nécessite pas l'autorisation x.
- 3) Méthode 3: chemin du script source ou chemin du script (l'autorisation x n'est pas requise)
- 4. Composition de script plus complète
- Quatrièmement, redirection et opération de pipeline
- Cinq, le rôle et le type des variables Shell
- Six, variables shell spéciales
Shell est un programme d'application spécial, il se situe entre le noyau du système d'exploitation et l'utilisateur, agissant comme un "interpréteur de commandes", chargé de recevoir et d'interpréter les instructions de fonctionnement (commandes) saisies par l'utilisateur, et de passer les opérations qui doivent être exécuté Donne l'exécution du noyau et affiche le résultat de l'exécution. Bash (/ bin / bash) est le shell par défaut utilisé par la plupart des versions de Linux.
1. Présentation du script Shell
1. Le concept de script Shell
1) Enregistrer l'ordre des commandes à exécuter dans un fichier texte
2) Donner au fichier la permission d'exécuter l'exécutable
3) Combiner diverses instructions de contrôle Shell pour effectuer des opérations plus complexes
2. Scénarios d'application des scripts Shell
1) Opérations répétitives
2) Traitement des transactions par lots
3
) Fonctionnement et maintenance automatisés 4) Surveillance de l'état de fonctionnement du service
5) Exécution de la tâche de chronométrage
3. Le rôle de Shell
1) Shell est le tube d'interprétation des commandes, le "traducteur" entre l'utilisateur et le noyau, chargé d'interpréter la saisie en ligne de commande par l'utilisateur.
2) Shell de connexion de l'utilisateur
- Programme ShellI utilisé par défaut après la connexion, généralement / bin / bash
- Les instructions internes et l'environnement d'exploitation des différents Shells seront différents
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
....
Deux, écrivez un script shell
1. Ecrire le code de script
● À l'aide de l'éditeur de texte vim,
une commande Linux par ligne, écrite dans l'ordre d'exécution
[root@localhost ~]#vim first.sh #编辑脚本文件,以.sh结尾是方便识别出这是个shell脚本文件
cd /boot/ #切换到根目录
pwd #查看当前所在目录
ls -lh vml* #以长格式更人性化的方式显示以vml开头的文件
Le fichier de script first.sh ci-dessus comprend trois commandes: cd / boot /, pwd, ls -lh vml *. Après avoir exécuté ce fichier de script, le résultat de sortie est en fait le résultat de l'exécution de ces trois commandes en séquence, réalisant ainsi un "traitement par lots".
2. Accordez des autorisations exécutables
● Rendre le script exécutable
[root@localhost~]#chmod +x first.sh
3. Exécutez le fichier de script
1) Méthode 1: La commande pour spécifier le chemin nécessite que le fichier ait l'autorisation x. (Chemin absolu et chemin relatif)
chmod + x /root/first.sh
Spécifiez le chemin absolu: /root/first.sh
Spécifiez le chemin relatif: ./first.sh
2) Méthode 2: spécifiez Shell pour interpréter le script, et le fichier ne nécessite pas l'autorisation x.
chemin du script sh: sh first.sh ou sh /root/first.sh
Chemin relatif (doit être dans le répertoire où se trouve le script), ce script est à l'origine créé dans le répertoire personnel (~ répertoire), le répertoire personnel de root est root.
Chemin absolu (spécifiez directement le chemin spécifique du fichier)
3) Méthode 3: chemin du script source ou chemin du script (l'autorisation x n'est pas requise)
. first.sh ou source first.sh (comme ci-dessus pour les exigences de chemin)
Cette méthode d'exécution basculera automatiquement vers le répertoire de démarrage. Ceci est dû au fait que source et. Lisez la configuration du script directement dans le processus en cours et ne démarrera pas un nouveau processus!
Source exécutera le contenu du script directement sur le processus parent (car il n'ouvre pas de nouveau processus, on peut dire qu'il ajoute directement le contenu d'exécution du script au processus courant). Ainsi, après votre source, les variables configurées à l'intérieur seront ajoutées à l'environnement actuel, et vous pouvez appeler les variables dans le script dans le shell!
Et ./first.sh et sh first.sh
sont un nouveau processus de sous-shell pour exécuter ce script sous le processus en cours. Lorsque le script est terminé, les variables définies dans sh et le sous-processus sont détruits ensemble! (Le sous-shell hérite des variables d'environnement du shell de processus parent, et les variables seront détruites à la fin du sous-shell. Si l'exportation est utilisée, les variables du sous-shell peuvent être renvoyées au shell de niveau parent).
4. Composition de script plus complète
- Instruction de script
- Informations d'annotation
- Instruction exécutable
[root@localhost~]#vim /first.sh
#!/bin/bash
#This is my first Shell-Script.
cd /boot
echo "当前的目录位于∶"
pwd
echo "其中以vml开头的文件包括∶" #输出友好提示信息
ls -Ih vml*
Dans le fichier de script first.sh ci-dessus, la première ligne "#! / Bin / bash" est une instruction de script spéciale, indiquant que les instructions après cette ligne sont interprétées et exécutées par le programme / bin / bash; les autres instructions commençant par " # "Indique des informations de commentaire; la commande echo est utilisée pour générer des chaînes afin de rendre les informations de sortie du script plus faciles à lire. Par exemple, si le script first.sh réécrit est exécuté, le résultat de sortie est le suivant.
Quatrièmement, redirection et opération de pipeline
1. Matériel matériel interactif
- Entrée standard: recevez les données d'entrée utilisateur de l'appareil
- Sortie standard: sortie des données vers l'utilisateur via l'appareil
- Erreur standard: signaler les informations d'erreur d'exécution via cet appareil
Types de | Fichier de l'appareil | Numéro de description du fichier | Appareil par défaut |
---|---|---|---|
Entrée standard | / dev / stdin | 0 | clavier |
Sortie standard | / dev / stdout | 1 | surveiller |
Sortie d'erreur standard | / dev / stderr | 2 | surveiller |
2. Opération de redirection
Types de | Opérateur | utilisation |
---|---|---|
Rediriger l'entrée | < | Lire les données du fichier spécifié |
Rediriger la sortie | > | Enregistrez le résultat de sortie standard dans le fichier spécifié et écrasez le contenu d'origine |
Rediriger la sortie | >> | Ajouter le résultat de sortie standard à la fin du fichier spécifié sans écraser le contenu d'origine |
Sortie d'erreur standard | 2> | Enregistrez les informations d'erreur dans le fichier spécifié et écrasez le contenu d'origine |
Sortie d'erreur standard | 2 >> | Ajouter le message d'erreur à la fin du fichier spécifié sans écraser le contenu d'origine |
Sortie mixte | &> | Enregistrer la sortie standard et l'erreur standard dans le même fichier |
Sortie mixte | 2> et 1 | Rediriger la sortie d'erreur standard vers la sortie standard |
Par exemple:
vim passwd.txt
222222
echo "123456" > passwd.txt
echo "123456" >> passwd.txt
Utilisez> pour afficher le contenu dans le fichier, ce qui écrasera directement le contenu du fichier
Utilisez >> pour indiquer ajouter au fichier, cela commencera une nouvelle ligne
setenforce 0
echo "123456" > passwd.txt
passwd --stdin zs < passwd.txt
Obtenez le mot de passe dans le fichier pass.txt. Notez que SELinux affectera l'exécution de la commande. Si l'exécution échoue, vous pouvez essayer de le fermer et réessayer.
3. Symbole d'opération de canalisation "|"
Le résultat de sortie de la commande de gauche est utilisé comme entrée (objet de traitement) de la commande de droite. Plusieurs canaux peuvent être utilisés dans la même ligne de commande.
Par exemple:
ps aux | wc -l #显示所有进程数
echo "abc123" | passwd --stdin zs #更改用户zs的密码为abc123
Cinq, le rôle et le type des variables Shell
Les variables sont des valeurs qui changeront, et celles qui ne changeront pas sont des constantes
1. Le rôle des variables
Utilisé pour stocker des paramètres spécifiques (valeurs)
que le système et les utilisateurs doivent utiliser. Nom de variable: utiliser un nom fixe, prédéfini par le système ou défini par l'utilisateur.
Valeur de variable: peut changer en fonction des paramètres utilisateur et des modifications de l'environnement système
2. Types de variables
Variables personnalisées: définies, modifiées et utilisées par l'utilisateur.
Variables spéciales: variables d'environnement, variables en lecture seule, variables d'emplacement, variables prédéfinies
3. Variables personnalisées
Définir une nouvelle variable
变量名=变量值 #变量名以字母或下划线开头,区分大小写,建议全大写
Afficher la valeur d'une variable
echo $变量名 #查看当前变量的值
Remarque: il ne peut y avoir aucun espace des deux côtés de "=" lors de l'attribution d'une valeur
Par exemple:
4. Utilisez des guillemets lors de l'attribution de valeurs
Guillemets doubles: permettent de citer d'autres valeurs de variables via le symbole $
Guillemet simple: il est interdit de citer d'autres valeurs de variable et $ est traité comme un caractère normal
Backtick: remplacement de commande, extraire la sortie après l'exécution de la commande, `` a le même effet que $ (...)
5. Entrez le contenu du clavier pour attribuer des valeurs aux variables
La commande de lecture obtient l'entrée
read -p 提示信息 变量名
echo $变量名
Il peut également être utilisé dans des scripts pour collecter des informations.
Par exemple:
Après avoir accordé l'autorisation d'exécution du script, le résultat de l'exécution est le suivant
6. La portée de la variable
1) Par défaut, les nouvelles variables définies ne sont valides que dans l'environnement Shell actuel, elles sont donc appelées variables locales. Lors de la saisie d'un sous-programme ou d'un nouvel environnement de sous-shell, les variables locales ne peuvent plus être utilisées.
2) Les variables spécifiées peuvent être exportées en tant que variables globales via l'exportation de commande interne, de sorte que les variables définies par l'utilisateur puissent continuer à être utilisées dans tous les environnements de sous-shell.
- Définissez l'expression de portée de la variable:
格式1:export 变量名
格式2:export 变量名=变量值
Vous pouvez utiliser la commande pstree pour afficher l'environnement Shell, entrez la commande bash pour entrer dans l'environnement sous-Shell, appuyez sur la combinaison de touches Ctrl + D ou entrez la commande exit pour quitter l'environnement sous-Shell.
Entrez bash pour accéder à l'environnement sous-bash (également appelé environnement sous-Shell), ce qui équivaut à ouvrir un sous-processus.
Après avoir attribué une valeur à PRODUCT dans l'environnement bash parent actuel, je suis entré dans le sous-environnement et j'ai constaté que la valeur de la variable PRODUCT ne pouvait pas être affichée dans le sous-environnement car PRODUCT n'est pas une variable d'environnement globale, et le PRODUIT dans le le sous-environnement n'a pas été attribué. Après avoir généré PRODUCT en tant que variable d'environnement globale, vous pouvez toujours afficher la valeur de la variable d'environnement parent PRODUCT même si vous entrez dans l'environnement Shell enfant.
7. Fonctionnement des variables entières
- Expression d'opération
格式:expr 变量1 运算符 变量2 [运算符 变量3]
- Opérateurs communs
Addition +, soustraction -, multiplication \ *, division /, prenez le% restant.
Expressions arithmétiques couramment utilisées:
a=`expr 11 \* 2`
echo $((10 / (1+1)))
echo $[10 / (1+1)]
let i=12*4
i++ 相当于 i=$[$i+1]
i-- 相当于 i=$[$i-1]
i+=2 相当于 i=$[$i+2]
Six, variables shell spéciales
1. Variables d'environnement
Créé à l'avance par le système pour définir l'environnement de travail de l'utilisateur.
Fichiers de configuration: / etc / profile (globalement efficace), ~ / .bash_profile (environnement utilisateur actuel)
2. Variables d'environnement communes
PWD 、
UTILISATEUR DE CHEMIN 、 SHELL 、 ACCUEIL
Utilisez la commande env pour afficher les variables d'environnement dans l'environnement de travail actuel. La
variable USER représente le nom de l'utilisateur, HOME représente le répertoire de base de l'utilisateur, LANG représente la langue et le jeu de caractères, PWD représente le répertoire de travail actuel et la variable PATH représente la recherche par défaut des programmes exécutables. path
3.PATH (variable d'environnement de chemin)
echo $PATH #查看当前搜索路径
PATH="$PATH:/root" #将/root目录添加到搜索路径
export PATH="$PATH:/root" #输出为全局环境变量
first.sh
Le passage à l'environnement sous-shell est toujours exécutable et les autres répertoires sont toujours exécutables
4. Variables en lecture seule
Utilisé lorsque la valeur de la variable ne peut pas être modifiée
readonly 命令设置只读变量
readonly PRODUCT #设置为只读变量
echo $PRODUCT
PRODUCT=Python #只读变量不可以被重新赋值
unset PRODUCT #只读变量不可以被删除,unset 命令用于删除变量,但无法删除只读变量,只能重启系统解决
5. Variables de localisation
Exécutez le script sh xxx.sh 1 2 3 4 5 6 7 8 9 10… n
$ n: n est un nombre, $ 0 représente la commande elle-même, 1 ~ 9 représentent le premier au neuvième paramètres, les paramètres supérieurs à dix doivent être exprimés entre accolades, par exemple, le dixième paramètre est $ {10}
6. Variables prédéfinies
$*、$@:表示命令或脚本要处理的参数。
$*:把所有参数看成以空格分隔的一个字符串整体,代表"$1 $2 $3 $4"。
$@:把各个参数加上双引号分隔成n份的参数列表,每个参数是独立 的,代表"$1" "$2" "$3" "$4"。
$0:表示当前执行的脚本或命令的名称。
$#:表示命令或脚本要处理的参数的个数。
$?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。
也常被用于Shell脚本中return退出函数并返回的退出值。
[root@localhost ~]#echo `date +%F` #查看完整日期,按照年-月-日的格式输出
2020-12-20
[root@localhost ~]#vim mybak.sh #编辑脚本
#!/bin/bash #表示此行以后的语句通过/bin/bash程序来解释执行
time=backup-`date +%F`.tar.gz #把变量值backup-`date+%F`.tar.gz赋值给变量time
tar zcf $time $* &> /dev/null #/dev/null表示的是一个黑洞文件,通常用于丢弃不需要的数据输出。
echo "已执行 $0 脚本,"
echo "共完成 $# 个对象的备份"
echo "具体内容包括: $*"
[root@localhost ~]#chmod +x mybak.sh #赋予执行权限
[root@localhost ~]#./mybak.sh /etc/passwd /etc/shadow