Deux façons pour le shell de passer des paramètres (version détaillée)

La première

On peut passer des paramètres au script lors de l'exécution du script Shell, le format des paramètres obtenus dans le script est : $n. n représente un nombre, 1 est le premier paramètre pour exécuter le script, 2 est le deuxième paramètre pour exécuter le script, et ainsi de suite...

Exemple
Dans l'exemple suivant, nous passons trois paramètres au script et les sortons respectivement, où $0 est le nom du fichier à exécuter :

#!/bin/bash
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

Définissez les autorisations exécutables pour le script et exécutez le script. Le résultat est le suivant :

$ chmod +x test.sh 
$ ./test.sh 1 2 3

执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3

De plus, plusieurs caractères spéciaux sont utilisés pour traiter les paramètres :

Instructions de gestion des paramètres

$#	传递到脚本的参数个数
$*	以一个单字符串显示所有向脚本传递的参数。
     如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$	脚本运行的当前进程ID号
$!	后台运行的最后一个进程的ID号
$@	与$*相同,但是使用时加引号,并在引号中返回每个参数。
    如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$-	显示Shell使用的当前选项,与set命令功能相同。
$?	显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
#!/bin/bash
echo "Shell 传递参数实例!";
echo "第一个参数为:$1";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";

Exécutez le script et le résultat est le suivant :

$ chmod +x test.sh 
$ ./test.sh 1 2 3
第一个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 2 3
 $* 与 $@ 区别:

Le même point : tous les paramètres sont cités.
Différence : Uniquement reflétée dans les guillemets doubles. En supposant que trois paramètres 1, 2, 3 sont écrits lorsque le script est en cours d'exécution, " * " équivaut à " 1 2 3 " (un paramètre est passé) et " @ " équivaut à " 1 " " 2 " " 3 " (trois arguments sont passés).

#!/bin/bash
echo "-- \$* 演示 ---"
for i in "$*"; do
    echo $i
done

echo "-- \$@ 演示 ---"
for i in "$@"; do
    echo $i
done

Exécutez le script et le résultat est le suivant :

$ chmod +x test.sh 
$ ./test.sh 1 2 3
-- $* 演示 ---
1 2 3
-- $@ 演示 ---
1
2
3

deuxième getops

getopts est un outil pour analyser les arguments des options de script.

Format de syntaxe :getopts [option[:]] [DESCPRITION] VARIABLE

option : représente une option qu'un script peut utiliser.

":": Si un deux-points (":") apparaît après une option (option), cela signifie que l'option peut être suivie d'un paramètre (c'est-à-dire une information de description DESCPRITION)

VARIABLE : Indique qu'une option est enregistrée dans la variable VARIABLE

getopts est une variable intégrée au système Linux, qui est généralement utilisée dans les boucles. Chaque fois que la boucle d'exécution est, getopts vérifiera les options de commande suivantes, si ces options apparaissent dans option, cela signifie que c'est une option légale, sinon ce n'est pas une option légale. Et enregistrez ces options légales dans la variable VARIABLE.
getopts contient également deux variables intégrées, OPTARG et OPTIND

  • OPTARG consiste à enregistrer les paramètres (ou informations de description DESCPRITION) après l'option dans cette variable.
  • OPTIND : cela représente l'index de l'option ou du paramètre suivant sur la ligne de commande (le nom de fichier ne compte pas comme une option ou un paramètre)

Faites attention aux points suivants lors de la première utilisation :

1) Le paramètre de position du script correspondra à la lettre unique dans optstring une par une. S'il correspond, il sera attribué à name, sinon le nom de l'affectation sera un point d'interrogation ;
2) Une seule lettre dans optstring est une option, si un deux-points est ajouté après la lettre, cela signifie que l'option est suivie d'un deux-points.Paramètre, la valeur du paramètre sera affectée à la variable OPTARG ;
3) Le premier deux-points dans optstring indique une erreur du système de blindage (test.sh : option illégale — h);
4) Il est permis de mettre des options ensemble, comme -ab

expérience

1. Le paramètre getops est simple à utiliser

#!/bin/bash
while getopts ':b:d:' OPT &> /dev/null;do
 case $OPT in
 b)
 echo "The options is b"
 echo $OPTARG ;;
 d)
 echo "The options is d"
 echo $OPTARG ;;
 *)
 echo "Wrong Options"
 exit 7 ;;
 esac
# echo $OPT
# echo $OPTARG
done
echo $OPTIND
shift $[$OPTIND-1]
echo $1

insérez la description de l'image ici
Expliquez en détail l'utilisation de getopts dans un script shell.
Résultat de l'exécution :

 ./getopts1.sh -d 'nice' fixnale

insérez la description de l'image ici
illustrer:

Lorsque -d est saisi, OPT = d , OPT=d,OP T _=d , OPTARG='nice', donc les informations de cette partie de d)... seront affichées.

Puisqu'il y a une option (-d) et un argument ('nice'), $OPTIND pointe vers la position d'index de l'option ou de l'argument suivant sur la ligne de commande, donc c'est 3 ici.

décalage [ [[ OPTIND-1] signifie exclure les options et les arguments devant le nom de fichier.

2. Utilisation ultérieure des paramètres getops

#!/bin/bash
echo $*
while getopts ":a:bc:" opt
do
 case $opt in
 a)
 echo $OPTARG $OPTIND;;
 b)
 echo "b $OPTIND";;
 c)
 echo "c $OPTIND";;
 ?)
 echo "error"
 exit 1;;
 esac
done
echo $OPTIND
shift $(( $OPTIND-1 ))
echo $0
echo $*

insérez la description de l'image ici
Expliquez en détail l'utilisation de getopts dans un script shell.
Résultat de l'exécution :

./getopts2.sh -a 11 -b -c 6

Expliquer en détail l'utilisation de getopts dans les scripts shell
illustrer:

while getopts “:a:bc:” opt#Le premier deux-points signifie ignorer les erreurs ; un deux-points après le caractère signifie que l'option doit avoir son propre paramètre.

$optargEnregistrez les paramètres des options correspondantes, telles que 11 et 6 dans l'exemple ci-dessus ;

$optindStockez toujours la prochaine option à traiter dans la position $* d'origine (pas un paramètre, mais une option, ici se réfère aux trois options a, b, c, pas ces nombres, bien sûr, les nombres occuperont également la position) position .

optindLa valeur initiale est 1, lorsque "x" est rencontré, l'option n'a pas de paramètres, optind+=1 ; lorsque "x :" est rencontré, l'option avec paramètres, optarg=argv[optind+1], optind+=2 ; lorsque "x:" est rencontré :", un paramètre facultatif, l'un de #1 et #2.

第一行输出echo $*

第二行,optind初值为1,选项-a的参数为11,下一个要处理的选项-b位置为3,所以输出:11 3;

第三行,然后-b要处理的下一个选项-c位置为4,所以输出:b 4;

第四行,再者-c有参数,所以下一个要处理的位置+2,所以输出:c 6;

Je suppose que tu aimes

Origine blog.csdn.net/low5252/article/details/103646475
conseillé
Classement