Partage de technologie

[Linux][Shell][Variables Shell] expliqué en détail

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


1. Variables locales

  • Définir les variables Shell, les noms de variables n'ont pas besoin d'être ajoutés$
  • variables localesValable uniquement pendant la durée de vie actuelle du shell de l'utilisateur

2. Définition des variables

  • Exigences en matière de nom de variable: Composé de lettres, de chiffres et de traits de soulignement.
  • Les noms de variables sont strictement sensibles à la casse

3. Obtenez la valeur de la variable

  • apostrophe: Ce que vous voyez est ce que vous obtenez, citation forte
  • Double citation : Afficher tout le contenu entre guillemets, identifier les symboles spéciaux, les références faibles
  • Pas de citations: Les symboles continus peuvent être sans guillemets. S'il y a des espaces, il y aura une ambiguïté.
  • backtick: Fait référence au résultat de l'exécution de la commande, égal à$()Usage

4.Variables spéciales

  • Variables spéciales du shell, utilisées dans les scripts et les fonctions pour passer des paramètres.

  • Il existe les variables de paramètres de position spéciales suivantes :

    variableeffet
    $0Obtenez le nom du fichier de script shell et le chemin du script
    $nRécupère le nième paramètre du script shell n est compris entre 1 et 9. S'il est supérieur à 9, certains{},comme{$10}
    $#Obtenez le nombre total de paramètres derrière le script shell exécuté
    $*Récupère tous les paramètres du script shell, sans les guillemets, cela équivaut à$@La fonction, plus les guillemets "$*", estReçoit tous les paramètres sous la forme d'une seule chaîne
    $@Sans guillemets, l'effet est le même que ci-dessus. Avec les guillemets, c'est le cas.Recevez tous les paramètres sous forme de chaînes indépendantes

5.Variables d'état spéciales

  • Méthode de rechercheman bash,rechercheSpecial Parameters

    variableeffet
    $?Valeur de retour du dernier état d'exécution de la commande, 0 est correct, non-0 est un échec
    $$Le numéro de processus du script shell actuel
    $!PID du dernier processus en arrière-plan
    $_Récupère le dernier paramètre de la dernière commande

6. Commandes de variables intégrées au Shell

1.écho

  • paramètre
    • -n: Contenu de sortie sans sauts de ligne
    • -e: Interpréter les caractères d'échappement
      • n: nouvelle ligne
      • r: Entrer
      • t:languette
      • b:retour arrière
      • v: Caractère de tabulation verticale

2.évaluation

  • Fonction:Exécuter plusieurs commandes
  • Exempleeval ls; cd ~

3.exec

  • Fonction: Ne créez pas de processus enfant et n'exécutez pas les commandes suivantes.execAprès exécution, automatiquementexit

7. Intercepter la chaîne

  • grammaire

    grammaireeffet
    #Supprimer la correspondance la plus courte du début
    ##Supprimer la correspondance la plus longue du début
    %Supprimer la correspondance la plus courte de la fin
    %%Supprimer la correspondance la plus longue de la fin
    #Interception du contenu de caractères spécifié
    a*cCorrespond à une chaîne commençant par a, n'importe quel nombre de caractères au milieu et se terminant par c
    ${变量}Renvoie la valeur de la variable
    ${#变量}Renvoie la longueur variable, la longueur des caractères
    ${变量:start}Renvoie le caractère après la valeur de décalage variable
    ${变量:start:length}Extraire les caractères limités par la longueur après décalage
    ${变量#word}Depuis le début de la variable, supprimez la sous-chaîne de mots correspondante la plus courte
    ${变量##word}Dès le début de la variable, supprimez le mot correspondant le plus long
    ${变量%word}Supprimez la sous-chaîne de mots correspondante la plus courte de la fin de la variable
    ${变量%%word}Supprimez la sous-chaîne de mots correspondante la plus longue de la fin de la variable
    ${变量/pattern/string}Remplacez le premier motif correspondant par une chaîne
    ${变量//pattern/string}Remplacer tous les modèles par une chaîne
  • Exemple d'opération: Supprimer le nom du fichier

    # 通过⼦串的替换⽅式
    snowk@SnowKYP# f=stu_102999_1_finished.jpg
    
    # 变量的⼦串功能,去掉后缀
    snowk@SnowKYP# echo ${f//_finished/}
    stu_102999_1.jpg
    
    # 利⽤变量的反引⽤替换⽂件名
    snowk@SnowKYP# mv $f `echo ${f//_finished/}`
    
    # 剩下的⽂件,利⽤循环操作
    # 找出剩下所有需要替换的jpg⽂件
    snowk@SnowKYP# ls *fin*.jpg
    stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg
    stu_102999_5_finished.jpg
    
    # 写shell循环代码,循环操作
    # 去掉所有jpg⽂件的_finished后缀
    snowk@SnowKYP# for file in `ls *fin*.jpg`;do mv $file `echo ${file//_finished/}`;done
    
    snowk@SnowKYP# ls *.jpg
    stu_102999_1.jpg stu_102999_2.jpg stu_102999_3.jpg stu_102999_4.jpg stu_102999_5.jpg
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

8. Traitement des variables d'expansion de coque spéciale

1. Grammaire

  • Fonction: Ces quatre variables étendues appartiennent toutes au jugement et au traitement des valeurs des variables.
  • grammaireparameter,参数,范围
    • ${parameter:-word}:siparameterLa valeur de la variable est vide, retournezwordchaîne
    • ${parameter:=word}:siparameterLa valeur de la variable est vide, alorswordRemplace une valeur de variable et renvoie sa valeur
    • ${parameter:?word}:siparameterLa valeur de la variable est vide,wordcommestderrSortie, sinon valeur de la variable de sortie
      • Utilisé pour renvoyer le message d'erreur lorsqu'une erreur se produit en raison de la définition de la variable comme étant vide.
    • ${parameter:+word}:siparameterSi la valeur de la variable est vide, ne faites rien, sinonwordretour

2. Scénarios d'application

  • Sauvegarde des données, script pour supprimer les données expirées
    # 原脚本命令,有bug,有歧义
    find ${file_path} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f
    
    # 修正后的脚本命令
    # 如果有bug起义,就在当前目录搜索并执行删除
    find ${file_path:=/tmp} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6