쉘이 매개변수를 전달하는 두 가지 방법(상세 버전)

첫번째

Shell 스크립트를 실행할 때 스크립트에 매개변수를 전달할 수 있으며 스크립트에서 얻은 매개변수의 형식은 $n입니다. n은 숫자, 1은 스크립트를 실행하는 첫 번째 매개변수, 2는 스크립트를 실행하는 두 번째 매개변수 등...

예제
다음 예제에서는 스크립트에 세 개의 매개변수를 전달하고 각각 출력합니다. 여기서 $0은 실행할 파일 이름입니다.

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

스크립트에 대한 실행 권한을 설정하고 스크립트를 실행합니다. 출력은 다음과 같습니다.

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

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

또한 매개변수를 처리하는 데 사용되는 몇 가지 특수 문자가 있습니다.

매개변수 처리 지침

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

스크립트를 실행하고 출력은 다음과 같습니다.

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

같은 점: 모든 매개변수가 인용됩니다.
차이점: 큰따옴표로만 반영됩니다. 스크립트가 실행 중일 때 3개의 매개변수 1, 2, 3이 작성되었다고 가정하면 " * "는 "1 2 3"(하나의 매개변수가 전달됨)과 동일하고 "@"는 "1" "2" " 3과 동일합니다. "(3개의 인수가 전달됨).

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

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

스크립트를 실행하고 출력은 다음과 같습니다.

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

두 번째 게톱스

getopts는 스크립트 옵션 인수를 구문 분석하는 도구입니다.

구문 형식:getopts [option[:]] [DESCPRITION] VARIABLE

옵션: 스크립트가 사용할 수 있는 옵션을 나타냅니다.

":": 옵션(옵션) 뒤에 콜론(":")이 나타나면 옵션 뒤에 매개변수(예: 설명 정보 DESCPRITION)가 올 수 있음을 의미합니다.

VARIABLE : VARIABLE 변수에 옵션이 저장되어 있음을 나타냅니다.

getopts는 일반적으로 루프에서 사용되는 Linux 시스템의 내장 변수입니다. 실행 루프가 있을 때마다 getopts는 다음 명령 옵션을 확인합니다. 이러한 옵션이 옵션에 나타나면 유효한 옵션임을 의미하고 그렇지 않으면 유효한 옵션이 아닙니다. 그리고 이러한 법적 옵션을 VARIABLE 변수에 저장합니다.
getopts에는 2개의 내장 변수 OPTARG 및 OPTIND도 포함되어 있습니다.

  • OPTARG는 이 변수의 옵션 뒤에 매개변수(또는 설명 정보 DESCPRITION)를 저장하는 것입니다.
  • OPTIND: 명령줄에서 다음 옵션 또는 매개변수의 인덱스를 나타냅니다(파일 이름은 옵션 또는 매개변수로 계산되지 않음).

처음 사용할 때 다음 사항에 주의하십시오.

1) 스크립트 위치 매개변수는 optstring의 단일 문자와 하나씩 일치합니다. 일치하면 name에 할당되고, 그렇지 않으면 할당 이름은 물음표가 됩니다.
2) optstring의 단일 문자는 다음과 같은 경우 옵션입니다. 문자 뒤에 콜론이 추가되면 옵션 뒤에 콜론이 온다는 의미입니다. 매개변수, 매개변수 값은 OPTARG 변수에 할당됩니다.
3) optstring의 첫 번째 콜론은 차폐 시스템 오류를 나타냅니다(test.sh: 잘못된 옵션 — h)
4) -ab와 같은 옵션을 함께 사용할 수 있습니다.

실험

1. getops 매개변수는 사용하기 쉽습니다.

#!/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

여기에 이미지 설명 삽입
셸 스크립트에서 getopts의 사용법을 자세히 설명합니다.
실행 결과:

 ./getopts1.sh -d 'nice' fixnale

여기에 이미지 설명 삽입
예시:

-d가 입력되면 OPT = d, OPT=d,OP T _=d , OPTARG='nice'이므로 d)...의 이 부분에 있는 정보가 표시됩니다.

옵션(-d)과 인수('nice')가 있으므로 $OPTIND는 명령줄에서 다음 옵션이나 인수의 인덱스 위치를 가리키므로 여기서는 3입니다.

시프트 [ [[ OPTIND-1]은 파일 이름 앞에서 옵션과 인수를 제거하는 것을 의미합니다.

2. 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 $*

여기에 이미지 설명 삽입
셸 스크립트에서 getopts의 사용법을 자세히 설명합니다.
실행 결과:

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

셸 스크립트에서 getopts의 사용을 자세히 설명합니다.
예시:

while getopts “:a:bc:” opt#첫 번째 콜론은 오류 무시를 의미하고, 문자 뒤의 콜론은 옵션에 자체 매개변수가 있어야 함을 의미합니다.

$optarg위의 예에서 11 및 6과 같이 해당 옵션의 매개변수를 저장합니다.

$optind항상 처리할 다음 옵션을 원래의 $* 위치에 저장합니다(매개변수가 아니라 옵션, 여기에서 세 가지 옵션 a, b, c를 나타냅니다. 그 숫자가 아닙니다. 물론 숫자도 위치를 차지함) 위치 .

optind초기 값은 1이고 "x"를 만나면 옵션에 매개변수가 없고 optind+=1이고 "x:"가 있으면 매개변수가 있는 옵션 optarg=argv[optind+1], optind+=2입니다. "x:"가 발생했습니다:", 선택적 매개변수, #1 및 #2 중 하나.

第一行输出echo $*

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

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

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

추천

출처blog.csdn.net/low5252/article/details/103646475