Maison >Tutoriel système >Linux >Un article pour comprendre quelles sont les dépendances des packages sous Linux

Un article pour comprendre quelles sont les dépendances des packages sous Linux

PHPz
PHPzavant
2024-02-12 21:18:29627parcourir

Utilisez ces conseils de codage pour écrire des scripts shell rapides et lisibles.

Bash est définitivement devenu une solution d'automatisation intégrée native pour chaque système moderne de type Unix ou système d'exploitation basé sur Unix. Les programmeurs utilisent Bash pour créer des scripts shell afin d'automatiser les tâches répétitives en ligne de commande. L'objectif principal de Bash est de fournir une syntaxe minimale pour exécuter d'autres programmes et gérer leurs codes de sortie et leurs sorties. Cependant, les interpréteurs Bash modernes disposent d'un langage de commande complet qui fournit les fonctionnalités de la plupart des langages de programmation à usage général. Par conséquent, nous pouvons écrire des scripts shell hautement lisibles en incluant des appels de ligne de commande traditionnels et du code algorithmique. Les versions modernes de Bash ont introduit des fonctionnalités liées aux performances telles que les tableaux associatifs et la prise en charge du passage par référence, donnant à Bash la possibilité de rivaliser avec d'autres langages prêts pour les scripts shell.

Dans cet article, je présenterai quelques astuces de codage Bash que vous pouvez inclure dans vos scripts shell pour les rendre modernes, rapides et lisibles. Grâce à ces conseils, vous pouvez utiliser Bash pour écrire de la programmation générale ou des implémentations d'algorithmes, telles que des prototypes d'algorithmes, des utilitaires d'implémentation ou même une programmation compétitive !

Utilisation de tableaux dans des scripts Shell

Les variables Bash traditionnelles n'ont généralement pas de type, mais vous pouvez les traiter sous forme d'entiers, de décimales ou de chaînes en fonction du contexte de traitement spécifique. Nous utilisons généralement des variables Bash pour stocker le résultat de la commande, les paramètres de l'algorithme et d'autres valeurs temporaires. Bash prend également en charge deux types de tableaux : unidimensionnel (index numérique) et associatif (structure clé-valeur). Comme avec d'autres langages généraux populaires à typage dynamique tels que Python, PHP ou JavaScript, travailler avec des tableaux Bash est très simple. Voici comment créer un tableau dans Bash :

#!/bin/bash
#Linux迷 www.linuxmi.com

numbers=(9 3 1 3 9)

declare -a words
words[0]='Linux迷'
words[1]='LinuxMi'

echo ${numbers[@]} ${words[@]}

Le contenu du tableau généré par le code ci-dessus est le suivant :

一文了解什么是 Linux 上的包依赖

Vous pouvez vérifier la déclaration de chaque référence de tableau via la commande intégrée déclarer comme ceci :

一文了解什么是 Linux 上的包依赖

Vérification des déclarations de tableau dans Bash, capture d'écran de l'auteur Vous pouvez également utiliser une syntaxe minimale pour les opérations sur les tableaux et les activités de traitement telles que l'ajout de nouveaux éléments, la suppression d'éléments existants, le traitement des éléments du tableau, le tri, etc. Par exemple, le code suivant supprime les valeurs de score invalides et imprime les trois scores les plus élevés :

#!/bin/bash
#Linux迷 www.linuxmi.com

declare -a marks
marks+=(75 65 80 102 26) # class A marks
marks+=(103 68) # class B marks

# 删除无效标记
for i in "${!marks[@]}"; do
    if ((marks[i] > 100)); then
        unset "marks[$i]"
    fi
done

# 对所有标记进行排序
marks_s=($(printf '%s\n' "${marks[@]}" | sort -nr))

# 打印前 3 名
echo ${marks_s[0]} ${marks_s[1]} ${marks_s[2]}
一文了解什么是 Linux 上的包依赖

Le code ci-dessus engendrera un processus de tri distinct car nous utilisons la commande externe sort, mais vous pouvez éviter cela en utilisant du code Bash pour implémenter un algorithme de tri simple tel que le tri par sélection.

Créez une carte ou un dictionnaire

Dans certains scénarios de programmation, nous devons stocker les données des paires clé-valeur dans des scripts shell. Les programmeurs utilisent souvent des structures de données clé-valeur pour créer des structures de dictionnaire, des mappages et des conteneurs de cache (via la mémorisation). Si vous écrivez vos scripts shell en Python, vous pouvez utiliser la structure de données du dictionnaire intégrée pour stocker les données clé-valeur. Comment utiliser la structure du dictionnaire dans Bash ?

Bash version 4.0 a introduit la fonction de tableau associatif pour stocker les données clé-valeur. Voici un exemple simple de tableau associatif Bash :

#!/bin/bash
#Linux迷 www.linuxmi.com

declare -A marks=([linux]=39 [ubuntu]=27 [debian]=83 [fedora]=59)

for key in "${!marks[@]}"; do
    printf "$key \t ${marks[$key]} \n"
done

Ici, nous avons utilisé la syntaxe !mapvar[@] pour extraire toutes les clés du dictionnaire sous forme de tableau sur lequel effectuer une itération. Le code ci-dessus imprimera toutes les clés et les valeurs correspondantes comme indiqué ci-dessous :

一文了解什么是 Linux 上的包依赖

Bash vous permet de manipuler et d'accéder aux données de tableaux associatifs en utilisant une syntaxe minimale. L'utilisation de tableaux associatifs Bash fonctionne de la même manière que l'utilisation de dictionnaires Python. Veuillez consulter l'exemple ci-dessous :

#!/bin/bash
#Linux迷 www.linuxmi.com

read -p "Enter coords (i.e., [x]=10 [y]=12): " coords
declare -A "coords=($coords)"

if [ ! -v "coords[x]" ]; then
    coords[x]=5
fi

if [ ! -v "coords[y]" ]; then
    coords[y]=10
fi

for key in "${!coords[@]}"; do
    printf "$key = ${coords[$key]} \n"
done

Le code source ci-dessus demande les coordonnées x et y à l'utilisateur, définit les valeurs par défaut pour les valeurs d'axe manquantes et les imprime sur le terminal. Ici, nous utilisons la syntaxe ! -v car nous utilisons généralement not in dans le dictionnaire Python.

实现命名参数支持

当您通过 Bash 解释器执行 shell 脚本时,操作系统会创建一个新的 Bash 进程,并将您的脚本文件作为第一个命令行参数。操作系统通常允许您将一系列参数传递给每个操作系统进程。当您为其他命令/进程提供命令行参数时,您也可以将它们传递到您的 Bash 脚本中。假设您需要将两个整数值传递给脚本。然后,您可以轻松使用 2 分别访问第一个和第二个参数值。但是,当您使用更多索引参数并且需要实现可选参数(也称为命令行标志或选项)时,事情将变得复杂。

作为这种情况的解决方案,您可以使用内置的 getopts 来使用命名参数。使用以下 shell 脚本,我们可以覆盖一些脚本中的默认值:

#!/bin/bash
#Linux迷 www.linuxmi.com

title="Linux迷 www.linuxmi.com"
message="Hello world!www.linuxmi.com  Linux迷"

while getopts ":t:m:" option; do
    echo $option
    case "${option}" in
        t)
            title=${OPTARG}
            ;;
        m)
            message=${OPTARG}
            ;;
    esac
done

zenity --info --title="$title" --text="$message"
一文了解什么是 Linux 上的包依赖

默认情况下,上面的脚本显示一个带有默认标题和消息的 GTK 消息框,但是您可以使用命名的命令行参数来覆盖它们,如下所示:

./linuxmi.com.sh -t "hello"

./linuxmi.com.sh -m "world"
一文了解什么是 Linux 上的包依赖

getopts 内置支持仅使用单个字母选项。您可以使用 getopt 来使用长形式选项(即–title),如此 gist 所示。

使用函数中的引用传递

引用传递是一种编程语言特性,它允许您通过内存引用将数据传递到函数中,而不是将整个数据段复制到新变量中。C ++ 程序员总是努力编写性能优先的代码,对于类对象,结构体和字符串,使用引用传递而不是值传递。

如果您使用的是 Bash 4.3 或更新版本,则可以使用名称引用在 shell 脚本中实现引用传递。以下是一个简单的示例代码片段,通过函数更改字符串变量:

#!/bin/bash
#Linux迷 www.linuxmi.com

function change_str_var() {
    local str_new="Bash"
    local -n str_ref=$1
    echo "$str_ref -> $str_new" # Python -> Bash
    str_ref=$str_new
}

str="Python"
change_str_var str
echo $str # Bash
一文了解什么是 Linux 上的包依赖

上述 change_str_var 函数使用 local 命令创建一个局部的 str_ref 引用,引用全局的 str 变量。然后,它通过覆盖旧字符串值来分配一个新的字符串值。

一些程序员在函数内部使用 echo 命令,并通过命令替换特性调用特定函数以从 Bash 函数返回值(因为原生 Bash return 关键字仅支持返回有效的退出代码)。这会生成另一个子 shell 并消耗更多资源。因此,现在程序员可以使用引用传递并编写性能优先的Bash函数返回,如果他们使用新的 Bash 版本。

使用类型和修饰符属性的变量

Bash 被称为一种无类型命令语言。换句话说,它通常将变量数据处理为字符串,但根据上下文(例如在算术扩展中)进行相应处理。另一方面,Bash 也允许程序员使用类型属性,并提供两种内置的数组类型。即使有了这些功能,我们也不能将 Bash 视为纯动态类型语言,但这些变量属性将Bash置于无类型和动态类型语言之间。

Bash 支持使用整数变量属性将特定变量标记为整数。一旦创建了一个整数变量,当您分配非整数值时,Bash 会发出警告,如下所示:

一文了解什么是 Linux 上的包依赖

Bash 还允许使用 declare -r 命令创建常量。每当您的脚本尝试更改常量时,Bash 会在屏幕上打印错误消息。此外,正如我们之前使用的那样,您可以使用 declare 内置函数创建数组。

Bash 还允许您为变量添加一些修饰符属性。例如,您可以创建仅包含小写字母或大写字母的字符串,如下所示:

declare -l lc_str="Hello World"
declare -u uc_str
uc_str="Hello"
uc_str="World"

echo $lc_str # hello world
echo $uc_str # WORLD
一文了解什么是 Linux 上的包依赖

使用 Bash 变量属性,您可以编写更少出错、更易读、更现代的 shell 脚本。

相关:Bash 特殊变量(?,#,@,$$,$*) 见 https://www.linuxmi.com/bash-special-variables.html

如果还有什么疑问与建议,请在评论栏里给我们留言。感谢您的阅读。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer