Bash 스크립트에서 명령줄 인수를 처리하는 방법

How Handle Command Line Arguments Bash Script



많은 경우 bash 스크립트는 스크립트에 입력 옵션을 제공하기 위해 인수 값이 필요합니다. 두 가지 방법으로 bash 스크립트에서 명령줄 인수를 처리할 수 있습니다. 하나는 사용하여 인수 변수 그리고 다른 하나는 getopts 기능. 명령줄 인수를 처리하는 방법은 이 자습서에 나와 있습니다.

인수 변수 사용:

인수 변수는 $0부터 시작합니다. 기본 스크립트 파일 이름은 명령줄 인수에서 인수 값을 받는 $0에 저장됩니다. 두 개의 인수가 명령줄에 전달되면 인수 값은 $1 및 $2 변수에 순차적으로 수신됩니다.







예 -1: 세 개의 숫자 값을 인수로 보내기

bash 파일을 만들고 다음 코드를 추가합니다. 스크립트는 세 개의 인수 값을 수신하고 $1, $2 및 $3에 저장합니다. 총 인수 수를 계산하고 루프가 있거나 루프가 없는 인수 값을 인쇄합니다. 마지막으로 모든 인수 값의 합계를 인쇄합니다.



#!/bin/bash

# 총 인수 수 계산
던졌다 '총 인수 수: $#'

# 인수 값을 개별적으로 읽기
던졌다 '첫 번째 인수 값: $1'
던졌다 '두 번째 인수 값 : $2'
던졌다 '세 번째 인수 값: $3'

# 루프를 사용하여 인수 값 읽기
~을위한인수~에 ' [이메일 보호됨] '
~하다
던졌다 -N '$argval'
완료

# 인수 값 추가
합집합= $(($ 1+$ 2+$3))

# 결과를 출력
던졌다 -그리고 'N합계의 결과 =$sum'

세 개의 숫자 인수 값으로 bash 파일을 실행하십시오.

$세게 때리다cmdline1.sh오십 35 열 다섯

예 -2: 파일 이름을 인수로 사용

bash 파일을 만들고 다음 코드를 추가하여 파일의 총 문자 수를 계산합니다. 여기에서 파일 이름은 명령줄 인수로 전달됩니다.

#!/bin/bash
파일 이름=$ 1
총 문자=``화장실 -씨 $파일명``
던졌다 '총 문자 수는$ totalchar'

파일 이름을 단일 인수 값으로 사용하여 bash 스크립트를 실행하고 다른 명령을 실행하여 해당 파일의 총 문자 수를 확인하십시오. 여기에서는 employee.txt 파일을 인수 값으로 사용합니다. employee.txt 파일의 총 문자 수는 204자입니다.

$세게 때리다cmdline2.sh 직원.txt
$화장실 -씨직원.txt

getopts 함수 사용:

데이터베이스 또는 파일에 데이터를 저장하거나 명령줄 인수 값을 기반으로 특정 형식에 대한 보고서를 생성하려는 경우 getopts 기능은 작업을 수행하는 가장 좋은 옵션입니다. Linux에 내장된 기능입니다. 따라서 스크립트에서 이 함수를 사용하여 명령줄에서 형식이 지정된 데이터를 쉽게 읽을 수 있습니다.

예 -1: getopts 함수로 인수 읽기

bash 파일을 만들고 다음 스크립트를 추가하여 사용법을 이해하십시오. getopts 기능. 'getopts' 함수는 명령줄 인수 옵션 및 인수 값을 읽기 위해 while 루프와 함께 사용됩니다. 여기서 4가지 옵션이 사용됩니다. '나', '엔', '엠' 그리고 '그리고' . case 문은 특정 옵션과 일치하고 인수 값을 변수에 저장하는 데 사용됩니다. 마지막으로 변수의 값을 인쇄합니다.

#!/bin/bash
동안 getopts ':내 안에:'화난;~하다
사례 $ 인수 ~에
NS) ID=$OPTARG;;
N) 이름=$OPTARG;;
미디엄) 제조일자=$OPTARG;;
그리고) 만료일=$OPTARG;;
이삭
완료
던졌다 -그리고 'N$ID $이름 $Manufacturing_date $만료일N'

다음 옵션 및 인수 값으로 파일을 실행합니다. 여기서 p100은 -i 옵션의 값, 'Hot Cake'는 -n 옵션의 값, '01-01-2018'은 -m 옵션의 값, '06-01-2018'은 -의 값입니다. 전자 옵션.

$세게 때리다cmdline3.sh-NSp001-N '핫케이크' -미디엄 '01-01-2018' -그리고 '06-01-2018 '

스크립트에서 간단한 값을 보내야 할 때 인수 변수를 사용하는 것이 좋습니다. 그러나 형식화된 방식으로 데이터를 보내려면 getopts 함수를 사용하여 인수 값을 검색하는 것이 좋습니다. 자세한 내용은 시청 비디오 !