Fonctions Shell et tableaux (fonctions super détaillées et exemples de tableaux)

Un: fonction shell

  L'essence de la fonction Shell est un morceau de code de script qui peut être réutilisé. Ce code est écrit à l'avance, placé à un emplacement désigné et peut être appelé directement lorsqu'il est utilisé.
  Les fonctions de Shell sont similaires aux fonctions d'autres langages de programmation tels que C ++, Java, Python, C #, mais diffèrent dans les détails de la syntaxe.
Le format de la syntaxe de la définition de la fonction Shell est le suivant:

function name() {
    
          #function是shell中的关键字,专门用来定义函数  name是函数名
  statements           #statements是函数要执行的代码,也就是一组语句;
  [return value]       #return value表示函数的返回值,其中return是shell关键字,专门用在函数中返回一个值;这一部分可以写也可以不写。
}                      #由{ }包围的部分称为函数体,调用一个函数,实际上就是执行函数体中的代码。

1.1: Rédaction simplifiée de la définition des fonctions

Si vous trouvez cela gênant, vous pouvez omettre le mot-clé function lors de la définition de la fonction:

name() {
    
    
  statements
  [return value]
}

Si vous écrivez le mot-clé de la fonction, vous pouvez également omettre les parenthèses après le nom de la fonction:

function name {
    
    
  statements
  [return value]
}

Je recommande d'utiliser l'écriture standard afin que peu importe qui écrit ce script, vous puissiez le comprendre.

[root@localhost opt]#vim jia.sh
#!/bin/bash
sum () {
    
    
s=`expr 5 + 3`
echo $s
}
sum
[root@server1 ~]# sh a.sh 
8
sum () {
    
    
s=`expr $1 + $2`
echo $s
}
sum 5 6
[root@server1 ~]# sh a.sh 
11
在这里插入代码片
sum () {
    
    
 return $(($1 + $2))
}
sum 3 4
echo $?
[root@server1 ~]# sh a.sh 
7
function sum(){
    
    
  #命令序列
  read -p "请输入第一个整数: " num1
  read -p "请输入第一个整数: " num2
  SUM=$[$num1+$num2]
  echo "和:$SUM"
}
sum
[root@server1 ~]# sh a.sh 
请输入第一个整数: 5
请输入第一个整数: 4
和:9
function sum(){
    
    
  #命令序列
  read -p "请输入第一个整数: " num1
  read -p "请输入第一个整数: " num2
  SUM=$[$num1+$num2]
  echo $SUM
}
tom=`sum 4 2`
let tom+=1
echo $tom
[root@server1 ~]# sh a.sh 
请输入第一个整数: 6
请输入第一个整数: 3
10

1.2: La portée de la fonction

  • Les fonctions des scripts Shell ne sont valides que dans l'environnement Shell actuel
  • Les variables du script ShelI sont globalement efficaces par défaut
  • Utilisez la commande locale pour limiter la variable à la fonction

Exemple

  • Les variables internes de la fonction sont implémentées par local

  • En définissant la fonction myfun, définissez la variable locale i à l'intérieur

  • Attribuer des valeurs à l'intérieur et à l'extérieur de la fonction pour vérifier les résultats

function sh(){
    
    
  #命令序列
  read -p "请输入第一个整数: " num1
  read -p "请输入第一个整数: " num2
  s=$[$num1+$num2]
  jerry=20
  echo 函数内$jerry
  echo 和:$s
}
sh
  echo 函数外$jerry
[root@server1 ~]# sh a.sh 
请输入第一个整数: 2
请输入第一个整数: 3
函数内20
和:5
函数外20

local définit les variables globales

function sh(){
    
    
  #命令序列
  read -p "请输入第一个整数: " num1
  read -p "请输入第一个整数: " num2
  s=$[$num1+$num2]
  local jerry=20     #local定义全局变量
  echo 函数内$jerry
  echo 和:$s
}
sh
  echo 函数外$jerry
[root@server1 ~]# sh a.sh 
请输入第一个整数: 2
请输入第一个整数: 4
函数内20
和:6
函数外

1.3: Fonction récursive

Appelez votre propre fonction
Exemple
Traversez récursivement le répertoire
Réalisez en définissant la fonction récursive list_files

#!/bin/bash
function list_files(){
    
    
 for s in `ls $1`
 do
 if [ -d "$1/$s" ]
  then
     echo "$2$s"
     list_files "$1/$s" "$2"
   else
     echo "$2$s"
   fi
   done
}
list_files "/var/log"
#$1表示/var/log
#$s表示/var/log下一个目录
#$2表示指定格式 子目录一定要做一个首行缩进
[root@server1 ~]# sh bianli.sh 
amanda
anaconda
anaconda.log
ifcfg.log
journal.log
ks-script-j10KNj.log
ks-script-mW8ioG.log
packaging.log
program.log
……

Deux: tableau shell

2.1: Les scénarios d'application incluent

  1. Longueur du package de scénario d'application
  2. Obtenir la longueur du tableau
  3. Obtenir la longueur de l'élément
  4. Itérer sur les éléments
  5. Tranche d'élément
  6. Remplacement d'élément
  7. Suppression d'élément

2.2: Description du tableau

Tableau: Mettez le même type de collecte de données. Il existe de nombreux
scénarios d'application: les notes et les noms des
camarades de classe [11,22,33,44] Ouvrez un espace continu dans la mémoire
Utilisez le
nom du tableau arr arr = (44) , 33,22,11)
Éléments du tableau: 44 33 22 11 sont tous
Longueur du tableau: arr a 4 éléments
Indice du tableau: 33 éléments sont inférieurs à 1 (par exemple, 11 indice est 3 22 indice est 2)
pour temporaire Scalar dans le tableau
ne
fait

2.3: Méthode de définition des tableaux

première méthode

数组名=(shuai0 shuai1 shuai2...

Deuxième méthode

数组名=([0]=shuai [1]=shuai [3]=shuai...[root@server1 test]# num=([0]=44 [1]=33 [2]=22 [3]=11)
[root@server1 test]# echo ${num[*]}
44 33 22 11

Troisième méthode

列表名="shuai0 shuai1 shuai2.."
数组名= ($列表名)
[root@server1 test]# tom=" 1 2 3 4 "
[root@server1 test]# num=($tom)
[root@server1 test]# echo ${num[*]}
1 2 3 4
#!/bin/bash
list=`cat test.txt`
echo $list
[root@server1 test]# sh test.sh
5 6 7 8
#!/bin/bash
list=`cat test.txt`
f=($list)
echo ${
    
    f[*]}
[root@server1 test]# sh test.sh
5 6 7 8

La troisième méthode est
souvent utilisée pour remplacer un élément

数组名[0]="shuai"
数组名[1]="shuai"
数组名[2]="shuai"
[root@server1 test]# num=([0]=2 [1]=5 [2]=6 [3]=8)
[root@server1 test]# echo ${num[*]}
2 5 6 8
[root@server1 test]# num[2]=10
[root@server1 test]# echo ${num[*]}
2 5 10 8

2.3.1: jusqu'à 100 tableaux

#!/bin/bash
for ((i=0;i<99;i++))
 do
 tom[$i]=$[$i+1]
 done
echo ${
    
    tom[*]} 
[root@server1 test]# sh 1_100.sh 
1 2 3 4 5 6 7 8 9 ……

2.3.2: Créer des tableaux impairs de 1 à 100

#!/bin/bash
for ((i=0;i<99;i+=2))
 do
 tom[$i]=$[$i+1]
 done
echo ${tom[*]}          
[root@server1 test]# sh 1_100.sh 
1 3 5 7 9 11 13 15 ……

Deuxième méthode

#!/bin/bash
k=0
j=1
 for ((i=0;i<=100;i++));do
 k=$[ $i + $j ]
 let j++
  if [ $k -le 100 ];then
    tom[$i]=$k
  fi
done
echo ${
    
    tom[@]}
[root@server1 test]# sh 1_100.sh 
1 3 5 7 9 11 13 ……

2.3.3: Créez n'importe quel nombre et longueur, ajoutez des éléments en fonction des besoins du client

#!/bin/bash
i=0
while true
do
  read -p "是否输入元素(yes/no):" e
  if [ $e == "no" ];then
  break
  fi
  read -p "请输入第$[$i+1]个元素:" f
  tom[$i]=$f
  let i++
done
echo ${
    
    tom[@]}
[root@server1 test]# sh 1_100.sh 
是否输入元素(yes/no):yes
请输入第1个元素:10
是否输入元素(yes/no):yes
请输入第2个元素:20
是否输入元素(yes/no):yes
请输入第3个元素:30
是否输入元素(yes/no):no
10 20 30

2.4.1: Obtenir la longueur du tableau et l'affectation des indices

[root@server1 test]# tom=(66 77 88)
[root@server1 test]# echo ${
    
    tom[@]}
66 77 88
[root@server1 test]# echo ${
    
    tom[1]}
77

2.4.2: L'ensemble de valeurs suivant, ajouter à 100 s'il est inférieur à 80

#!/bin/bash
num=(56 79 63 32 88)
#遍历数组
  for ((i=0;i<${
    
    #num[*]};i++))
  do
  if [ ${
    
    num[$i]} -lt 80 ];then
    new[$i]=100
  else
    new[$i]=${
    
    num[$i]}
  fi
done
echo ${
    
    new[*]}
[root@server1 ~]# sh shell.sh 
100 100 100 100 88

2.4.3: Trouver la valeur maximale du tableau

#!/bin/bash
num=(12 63 43 52)
tom=0
   for ((i=0;i<${
    
    #num[*]};i++))
   do
  if [ ${
    
    num[$i]} -gt $tom ];then
   tom=${
    
    num[$i]}
 fi
done
echo $tom
[root@server1 ~]# sh max.sh 
63

Je suppose que tu aimes

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