Explication détaillée des variables de spécification de programmation shell Linux (spécification de programmation shell, mode d'exécution des scripts, symboles de tube et redirection, types de variables shell)
- Préface
-
- One: Présentation du script Shell
-
- 1.1: Le concept des scripts shell
- 1.2: Scénarios d'application de script Shell
- 1.3: Le shell de connexion de l'utilisateur
- 1.31: type commande-affichage du type de commande spécifié
- 1.4: Ecrire le premier script shell
- 1.41: Écriture du code de script
- 1.4.2 Accorder des autorisations exécutables
- 1.5: Exécuter le fichier de script
- Deux: redirection et opération de pipeline
- Trois: Explication détaillée des variables de script shell
-
- 3.1: Le rôle et le type des variables: les variables sont le type de programmation le plus courant
- 3.11: Le rôle des variables
- 3.12: Types de variables
- 3.2: Variables personnalisées
- 3.21: Définir une nouvelle variable et afficher la valeur de la variable
- 3.22: Règles de dénomination des variables
- 3.23: Annuler la variable non définie
- 3.24: Utilisez des guillemets lors de l'attribution de valeurs
- 3.25: Entrer le contenu du clavier pour attribuer la lecture
- 3.26: Définissez la portée des paramètres d'exportation des variables disponibles dans le monde entier
- 3.27: Opération expr de variables entières
- Quatre: variables shell spéciales
Préface
Shell est un programme écrit en langage C, qui permet aux utilisateurs d'utiliser Linux. Shell est à la fois un langage de commande et un langage de programmation.
L'exécution des commandes Linux doit reposer sur l'interpréteur de commandes Shell. Shell est en fait un programme spécial s'exécutant dans le système d'exploitation Linux. Il est situé entre le noyau du système d'exploitation et l'utilisateur. Il est chargé de recevoir et d'interpréter les commandes saisies par l'utilisateur et de transmettre les opérations qui doivent être effectuées au noyau système pour exécution. Agissant comme un "traducteur" entre le noyau et le noyau. Lorsque l'utilisateur se connecte au système Linux, un programme Shell est automatiquement chargé pour fournir à l'utilisateur un système d'exploitation qui peut entrer des commandes.
One: Présentation du script Shell
1.1: Le concept des scripts shell
- Enregistrez les commandes à exécuter dans un fichier texte dans l'ordre
- Donner au fichier une autorisation exécutable pour une utilisation facile + une autorisation d'exécution x
- Peut être combiné avec diverses instructions de contrôle shell pour effectuer des opérations plus complexes
1.2: Scénarios d'application de script Shell
- Opération répétitive
- Traitement des transactions par lots
- Gestion automatisée des opérations et de la maintenance
- Surveillance de l'état de fonctionnement du serveur
- Exécution de tâche planifiée
- ……
Le rôle du shell ----- Interpréteur de commandes, "traducteur"
1.3: Le shell de connexion de l'utilisateur
- Programme Shell utilisé par défaut après la connexion, généralement / bin / bash
- Les commandes internes et l'environnement d'exploitation des différents shells seront différents
[root@server1 ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
1.31: type commande-affichage du type de commande spécifié
[root@shuai opt]# type cd
cd 是 shell 内嵌
[root@shuai opt]# type mkdir
mkdir 是 /usr/bin/mkdir
[root@shuai opt]# type bash
bash 是 /usr/bin/bash
[root@shuai opt]# type which
which 是 `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' 的别名
1.4: Ecrire le premier script shell
1.41: Écriture du code de script
- Utiliser l'éditeur de texte vi
- Une commande Linux par ligne, écrite dans l'ordre d'exécution
- Le suffixe du script est .sh
vim cendy.sh
#!/bin/bash #shell脚本固定格式
cd /boot #切换到boot目录
pwd #查看当前所在位置
ls -lh vml* #看vml开头所有文件
:wq #ESC切换到命令模式 保存退出
[root@server1 test]# ls -lh
总用量 4.0K
-rwxr-xr-x. 1 root root 38 9月 18 14:10 cendy.sh
1.4.2 Accorder des autorisations exécutables
[root@server1 test]# chmod +x cendy.sh
1.5: Exécuter le fichier de script
- Méthode 1: chemin du fichier de script (chemin absolu et chemin relatif)
[root@server1 test]# ls -lh
总用量 8.0K
-rwxr-xr-x. 1 root root 38 9月 18 14:10 cendy.sh
-rw-r--r--. 1 root root 25 9月 18 14:25 jerry #无执行权限
[root@server1 test]# ./jerry.sh
-bash: ./jerry.sh: 权限不够
[root@server1 test]# ./cendy.sh
/boot
-rwxr-xr-x. 1 root root 5.7M 8月 26 17:42 vmlinuz-0-rescue-34c5caefc7194359afe5202e8cdfd9fe
-rwxr-xr-x. 1 root root 5.7M 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64
- Méthode 2: chemin du fichier de script sh
[root@server1 test]# sh jerry.sh
/boot
-rwxr-xr-x. 1 root root 5.7M 8月 26 17:42 vmlinuz-0-rescue-34c5caefc7194359afe5202e8cdfd9fe
-rwxr-xr-x. 1 root root 5.7M 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64
Deux: redirection et opération de pipeline
2.1: Périphérique matériel interactif 0 1 2
- Entrée standard: accepter 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 | description du fichier | Appareil par défaut |
---|---|---|---|
Entrée standard | / dev / stdin | 0 | clavier |
Sortie standard / dev / stdout | 1 | moniteur | |
Sortie d'erreur standard | / dev / stder | 2 | moniteur |
2.2: opération de redirection
Types de | Opérateur | utilisation |
---|---|---|
Rediriger l'entrée | < | Lire les données du fichier spécifié au lieu de les saisir à partir du clavier |
Rediriger la sortie | > | Enregistrer le résultat de la sortie dans le fichier spécifié (écraser le contenu d'origine) |
Rediriger la sortie | >> | Ajouter le résultat de sortie au fichier spécifié |
Sortie d'erreur standard 2 | > | Enregistrer les informations d'erreur dans le fichier spécifié (écraser le contenu d'origine) |
Sortie d'erreur standard | 2 >> | Ajouter les informations d'erreur au fichier spécifié |
Sortie mixte & | > | Enregistrez le contenu de la sortie standard et de l'erreur standard dans le même fichier |
2.3: Symbole d'opération du pipeline "|"
- Sortie du résultat de la commande à gauche comme cible de traitement de la commande à droite
[root@server1 test]# grep "bash$" /etc/passwd #查看以bash结尾的登录账号
root:x:0:0:root:/root:/bin/bash
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
qy:x:1000:1000:qyf:/home/qyf:/bin/bash
#以冒号分隔,输出第1,7个字段 ##如果不写-F 就是指标符号跟空格
[root@server1 test]# grep "bash$" /etc/passwd | awk -F: '{print $1.$7}'
root/bin/bash
amandabackup/bin/bash
qyf/bin/bash
Awk est un type d'expression régulière
大部分情况下
grep:过滤关键字 grep egrep
sed 老二 按行读取
awk 老三 按列读取数据
sed: 按行读取
awk:按列读取数据
$1,$7:位置变量
[root@shuai opt]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 5.0G 46G 10% /
devtmpfs devtmpfs 3.6G 0 3.6G 0% /dev
tmpfs tmpfs 3.6G 0 3.6G 0% /dev/shm
tmpfs tmpfs 3.6G 13M 3.6G 1% /run
tmpfs tmpfs 3.6G 0 3.6G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 179M 836M 18% /boot
/dev/mapper/centos-home xfs 242G 33M 242G 1% /home
tmpfs tmpfs 726M 4.0K 726M 1% /run/user/42
tmpfs tmpfs 726M 48K 726M 1% /run/user/0
/dev/sr0 iso9660 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
####提取第一个跟第六个
[root@shuai opt]# df -Th | awk '{print $1,$6}'
文件系统 已用%
/dev/mapper/centos-root 10%
devtmpfs 0%
tmpfs 0%
tmpfs 1%
tmpfs 0%
/dev/sda1 18%
/dev/mapper/centos-home 1%
tmpfs 1%
tmpfs 1%
/dev/sr0 100%
##过滤以/结尾 第一列跟第六列
[root@shuai opt]# df -Th | grep "/$" | awk '{print $1,$6}'
/dev/mapper/centos-root 10%
Trois: Explication détaillée des variables de script shell
3.1: Le rôle et le type des variables: les variables sont le type de programmation le plus courant
Un moyen d'accéder temporairement aux données en mémoire
3.11: Le rôle des variables
Pour fournir des paramètres spécifiques pour une gestion flexible du système limux, il a deux significations.
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 changements dans l'environnement du système
3.12: Types de variables
Variables personnalisées: définies, modifiées et utilisées par l'utilisateur.
Variables d'environnement: gérées par le système et utilisées pour définir l'environnement de travail.
Variables d'emplacement: transmettre des paramètres au programme de script via la ligne de commande.
Variables prédéfinies: un type de variable intégrée à Bash qui ne peut pas être modifié directement
3.2: Variables personnalisées
3.21: Définir une nouvelle variable et afficher la valeur de la variable
Définir une nouvelle variable personnalisée variable = le
nom de la variable d' écho commence par des sous-titres ou un trait de soulignement, sensible à la casse, tout en majuscules est recommandé.
Format de la variable nom de la variable = valeur de la
variable Afficher la valeur de la variable
echo $ nom de la variable
3.22: Règles de dénomination des variables
命名只能使用英文字母,数字和下划线,首个字符不能用数字开头’
中间不能有空格,可以用下挂线—
不能使用标点符号
不能使用bash的关键字【可用help命令查看保留关键字】
VFDA = 2
age = 90 整型## here = s'appelle le symbole d'assignation
name = 'baisn' string
score = 88.8 [single precision floating point 4 bytes] shuai = 8.88 [double precision floating point 8 bytes]
[root@server1 test]# dd=20
[root@server1 test]# $dd=20
bash: 20=20: 未找到命令...
[root@server1 test]# echo $dd 20
20 20
[root@server1 test]# echo $dd
20
[root@server1 test]# name=dd
[root@server1 test]# echo $name
cc
[root@server1 test]# echo $name dd
cc dd
3.23: Annuler la variable non définie
[root@server1 test]# name=aa
[root@server1 test]# echo $name
aa
[root@server1 test]# unset name #取消变量
[root@server1 test]# echo $name
#输出为空
3.24: Utilisez des guillemets lors de l'attribution de valeurs
- Les guillemets doubles
permettent à d'autres valeurs de variable d'être référencées par des symboles, c'est-à-dire, dans le cas de la représentation d'une chaîne, s'il existe un symbole pour référencer d'autres valeurs de variable, c'est-à-dire, dans le cas de la représentation d'une chaîne, s'il existe un symbole pour référencer d'autres valeurs de variable, c'est-à-dire qu'il peut représenter Dans le cas d'une chaîne, il peut également représenter un scalaire s'il existe - apostrophe
Il est interdit de citer d'autres valeurs de variable. C'est un caractère normal, qui est considéré comme une chaîne, et les symboles de variable ne sont pas reconnus. Backtick: substitution de commande, extraire le résultat de la sortie après l'exécution de la commande. Variable = backtick équivaut à variable = ()
[root@server1 test]# siri=10
[root@server1 test]# echo $siri
10
[root@server1 test]# siri2="50 $siri"
[root@server1 test]# echo $siri2
50 10
[root@server1 test]# siri=`ps aux | wc -l`
[root@server1 test]# echo $siri
204
[root@server1 test]# siri='ps aux | wc -l'
[root@server1 test]# echo $siri
ps aux | wc -l
3.25: Entrer le contenu du clavier pour attribuer la lecture
[root@server1 test]# vim weather.txt
#!/bin/bash
read -p "请输入今天的天气:" weather
echo "今天天气是: $weather"
#命令模式 :wq 保存退出
[root@server1 test]# chmod +x weather.txt
[root@server1 test]# ./weather.txt
3.26: Définissez la portée des paramètres d'exportation des variables disponibles dans le monde entier
- Format 1: nom de la variable d'exportation
- Format 2: nom de la variable d'exportation = valeur de la variable
- Les deux formats peuvent être mélangés. L'
export peut définir la variable comme une variable globale. Dans ce cas, la variable peut être utilisée, qu'il s'agisse d'un changement d'environnement bash ou d'un changement d'utilisateur.
[root@server1 test]# tom=shu
[root@server1 test]# echo $tom
shu
[root@server1 test]# bash #设置bash环境
[root@server1 test]# echo $tom
#输出为空
[root@server1 test]# exit #退出bash环境
exit
[root@server1 test]# echo $tom
shu
[root@server1 test]# export tom #设置为全局变量
[root@server1 test]# bash
[root@server1 test]# echo $tom #引用全局变量
shu
3.27: Opération expr de variables entières
expr variable 1 variable d'opérateur 2 [variable d'opérateur 3] .. . . . .
Opérateurs communs
- Opération d'addition: +
- Opération de soustraction: -
- Opération de multiplication: * La multiplication doit ajouter \, car dans le langage shell, * représente un symbole générique
- Opération de division: /
- Fonctionnement du module (reste):%
[root@server1 test]# expr 1 + 2
3
[root@server1 test]# expr 5 - 2
3
[root@server1 test]# expr 5 \* 2
10
[root@server1 test]# expr 2 / 2
1
[root@server1 test]# expr 5 % 2
1
[root@server1 test]# vim test1.sh
#!/bin/bash
read -p "第一天学习了几个小时:" time1
read -p "第二天学习了几个小时:" time2
time=`expr $time1 + $time2`
echo "两天学习时间总和为$time "
[root@server1 test]# chmod +x test1.sh
[root@server1 test]# ./test1.sh
第一天学习了几个小时:12
第二天学习了几个小时:12
两天学习时间总和为24
Quatre: variables shell spéciales
4.1 Variables d'environnement
- Créé à l’avance par le système pour configurer l’environnement de travail de l’utilisateur
- Fichiers de configuration: / etc / profile, ~ / .bash_prolile
4.2 Variables d'environnement communes
- PWD \ 、 CHEMIN
- UTILISATEUR 、 COQUE 、 ACCUEIL
[root@server1 test]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@server1 test]# echo $PWD
/root/test
[root@server1 test]# vim test2.sh
[root@server1 test]# sh test2.sh 40 20
第一个值 40
第二个值 20
减运算结果为20
4.3: Variables prédéfinies
- $ #: Le nombre de variables de position dans la ligne de commande
- $ *: le contenu de toutes les variables de localisation
- $?: Le statut renvoyé après l'exécution de la dernière commande. Lorsque la valeur du statut de retour est 0, cela signifie normal et une valeur différente de zéro signifie une exécution anormale ou une erreur.
- $ 0: nom du processus / programme en cours d'exécution
- Script d'analyse
[root@server1 test]# vim test3.sh
#!/bin/bash
t=b-`date +%s`.tgz #设置变量名称,+%s表示从1970年至今的秒数
tar zcvf $t $* &> /dev/null #压缩到 /dev/null
echo "已执行$0个脚本"
echo "共完成$#个对象的备份"
echo "具体内容包括:$*"
[root@server1 test]# chmod +x test3.sh
[root@server1 test]# ./test3.sh /etc/passwd /etc/shadow
已执行./test3.sh个脚本
共完成2个对象的备份
具体内容包括:/etc/passwd /etc/shadow
#/dev/null:黑洞
%Y表示年
%m表示月
%d表示日
%H表示小时
%M表示分钟
%S表示秒
%s表示从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数,相当于time函数
%w表示一周中的第几天。
[root@server1 test]# date
2020年 09月 20日 星期日 22:04:22 CST
[root@server1 test]# date +%Y%D$%H:%M
202009/20/20$22:03
[root@server1 test]# date +%s #从1970年1月1日到现在的秒数
1600610688