Un must pour une explication détaillée des variables de spécification de programmation shell! ! ! (Symbole de tuyau et redirection, type de variable de coque)

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

  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"Insérez la description de l'image ici

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

  1. Format 1: nom de la variable d'exportation
  2. Format 2: nom de la variable d'exportation = valeur de la variable
  3. 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

  1. Opération d'addition: +
  2. Opération de soustraction: -
  3. Opération de multiplication: * La multiplication doit ajouter \, car dans le langage shell, * représente un symbole générique
  4. Opération de division: /
  5. 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

  1. $ #: Le nombre de variables de position dans la ligne de commande
  2. $ *: le contenu de toutes les variables de localisation
  3. $?: 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.
  4. $ 0: nom du processus / programme en cours d'exécution
  5. 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

Je suppose que tu aimes

Origine blog.csdn.net/qyf158236/article/details/108663831
conseillé
Classement