Bash Shell 명령 행 인자 사용

15118 단어 linux수송 하 다.
Bash Shell 명령 행 인자 사용
스 크 립 트 를 실행 할 때 스 크 립 트 가 실 행 될 수 있 도록 관련 인 자 를 함께 입력 해 야 할 수도 있 습 니 다. 스 크 립 트 를 실행 할 때 스 크 립 트 이름 뒤에 있 는 인 자 를 명령 행 인자 라 고 합 니 다.만약 이 매개 변 수 를 사용한다 면, 우 리 는 특수 변수 위치 매개 변 수 를 사용 해 야 한다.bash 셸 은 스 크 립 트 에서 참조 할 수 있 도록 명령 행 인 자 를 순서대로 위치 매개 변수 에 할당 합 니 다.
1 읽 기 매개 변수
위치 매개 변수 변 수 는 표준 적 인 숫자 입 니 다. $0 는 프로그램 이름 입 니 다. $1 은 첫 번 째 매개 변수 이 고 $2 는 두 번 째 매개 변수 입 니 다. 순서대로 유추 하여 아홉 번 째 매개 변수 $9 까지 합 니 다.여러 명령 행 인 자 는 빈 칸 으로 구분 해 야 합 니 다.현재 스 크 립 트 는 다음 과 같 습 니 다:
[root@Centos7T blogscripts]#cat t1.sh
#!/bin/bash
echo "Script name is : $0"
echo "The 1st parameter is : $1"
echo "The 2nd parameter is : $2"
echo "The 3rd parameter is : $3"

이 스 크 립 트 는 스 크 립 트 이름과 세 명령 행 인 자 를 한 번 에 인쇄 하여 입력 합 니 다.스 크 립 트 를 실행 하고 인 자 를 입력 합 니 다. 실행 결 과 는 다음 과 같 습 니 다.
[root@Centos7T blogscripts]#bash t1.sh 100 200 300
Script name is : t1.sh
The 1st parameter is : 100
The 2nd parameter is : 200
The 3rd parameter is : 300

2 테스트 매개 변수
명령 행 인자 가 필요 한 스 크 립 트 가 실 행 될 때 해당 하 는 인 자 를 입력 하지 않 았 거나 입력 한 인자 가 맞지 않 으 면 스 크 립 트 가 이상 하 게 작 동 하고 기계 가 무 너 질 수 있 습 니 다.따라서 명령 행 파라미터 의 존재 성과 합 리 성에 대한 테스트 가 필요 하 다.현재 스 크 립 트 는 다음 과 같 습 니 다:
[root@Centos7T blogscripts]#cat t2.sh
#!/bin/bash
result=`echo " scale=4;1 / $1" | bc`
echo "The reciprocal of $1 is : $result"

이 스 크 립 트 는 명령 행 인자 의 역 수 를 계산 하고 4 자리 작은 숫자 를 유지 합 니 다.스 크 립 트 를 실행 하고 인 자 를 입력 합 니 다. 실행 결 과 는 다음 과 같 습 니 다.
[root@Centos7T blogscripts]#bash t2.sh 7
The reciprocal of 7 is : .1428
[root@Centos7T blogscripts]#bash t2.sh 8
The reciprocal of 8 is : .1250

그러나 인 자 를 입력 하지 않 거나 인 자 를 입력 하지 않 으 면 스 크 립 트 실행 에 이상 이 발생 합 니 다.
[root@Centos7T blogscripts]#bash t2.sh
(standard_in) 2: syntax error
The reciprocal of  is :
[root@Centos7T blogscripts]#bash t2.sh 0
Runtime error (func=(main), adr=9): Divide by zero
The reciprocal of 0 is :

개 선 된 스 크 립 트 는 매개 변수 에 대한 테스트 를 추 가 했 습 니 다. 매개 변수 가 존재 하지 않 거나 매개 변 수 를 0 으로 제 거 했 습 니 다. 코드 는 다음 과 같 습 니 다.
[root@Centos7T blogscripts]#cat t2.sh
#!/bin/bash
if [ -z $1 ];then
echo "You should input one parameter"
elif [ $1 -eq 0 ];then
echo "Zero can't be devide"
else
result=`echo " scale=4;1 / $1" | bc`
echo "The reciprocal of $1 is : $result"
fi

테스트 결 과 는 다음 과 같다.
[root@Centos7T blogscripts]#bash t2.sh
You should input one parameter
[root@Centos7T blogscripts]#bash t2.sh 0
Zero cant be devide
[root@Centos7T blogscripts]#bash t2.sh 3
The reciprocal of 3 is : .3333
[root@Centos7T blogscripts]#bash t2.sh 8
The reciprocal of 8 is : .1250

3 매개 변수 수량 통계
일부 스 크 립 트 는 여러 개의 인자 가 필요 할 수 있 습 니 다. 우 리 는 모든 매개 변수 에 대해 존재 성 을 테스트 하 는 데 불편 합 니 다.그러나 명령 행 매개 변수의 실제 수량 을 통계 한 다음 에 스 크 립 트 에 필요 한 매개 변수 수량 과 비교 하면 명령 행 매개 변수 가 스 크 립 트 의 수 요 를 만족 시 키 는 지 대체적으로 판단 할 수 있다.변수 $# 는 명령 행 인자 의 수 를 자동 으로 가 져 옵 니 다. 현재 하나의 예 를 통 해 그 용법 을 관찰 합 니 다.
[root@Centos7T blogscripts]#cat t3.sh
#!/bin/bash
if [ $# -ne 4 ];then
echo "You should input 4 parameter"
else
echo "($1+$2)*($3+$4)=$[($1+$2)*($3+$4)]"
fi

스 크 립 트 는 4 개의 인 자 를 입력 하고 두 개 를 구 한 후에 두 사람의 곱 을 가 져 와 야 합 니 다.계산 을 실행 하기 전에 먼저 매개 변수의 수량 과 4 를 비교 합 니 다.현재, 우 리 는 파 라 메 터 를 입력 하지 않 고 3 개, 4 개, 5 개 파 라 메 터 를 입력 하여 각자 의 실행 결 과 를 테스트 합 니 다.
[root@Centos7T blogscripts]#bash t3.sh
You should input 4 parameter
[root@Centos7T blogscripts]#bash t3.sh 2 3 4
You should input 4 parameter
[root@Centos7T blogscripts]#bash t3.sh 2 3 4 5
(2+3)*(4+5)=45
[root@Centos7T blogscripts]#bash t3.sh 2 3 4 5 6
You should input 4 parameter

4 Shift 명령 과 인자 이동shift 명령 은 명령 행 매개 변수 가 전체적으로 왼쪽으로 이동 하 는 것 을 제어 할 수 있다.shift 명령 을 사용 할 때 기본 값 으로 매개 변수 변 수 를 왼쪽으로 이동 합 니 다.예 를 들 어 변수 $3 의 값 은 $2 로 이동 하고 변수 $2 의 값 은 $1 로 이동 하 며 변수 $1 의 값 은 삭 제 됩 니 다.물론 변수 $0 의 값, 즉 프로그램 이름 은 변 하지 않 습 니 다.어떤 인자 가 옮 겨 지면 그 값 은 버 려 져 서 다시 복구 할 수 없습니다.다음은 간단 한 스 크 립 트 를 통 해 그 용법 을 관찰 합 니 다.
[root@Centos7T blogscripts]#cat t4.sh
#!/bin/bash
while [ -n "$1" ];do
echo "$@"
shift
done

이 스 크 립 트 는 while 순환 구 조 를 이용 하여 모든 명령 행 인 자 를 입력 하고 명령 행 인 자 를 왼쪽으로 이동 합 니 다.변수 $1 값 이 비어 있 음 을 알 고 순환 이 끝 납 니 다.실행 결 과 는 다음 과 같 습 니 다.
[root@Centos7T blogscripts]#bash t4.sh A B C D E F
A B C D E F
B C D E F
C D E F
D E F
E F
F

그러나 주의해 야 할 것 은 shift 명령 을 한 번 실행 하지 않 으 면 매개 변수 총수 가 1 로 줄 어 들 고 변수 $# 가 1 로 줄 어 든 다 는 것 이다.다음 스 크 립 트 는 제 가 연락 중 에 귀 찮 게 한 오류 입 니 다. 지금 그것 을 열거 하 십시오.
[root@Centos7T blogscripts]#cat t5.sh
#!/bin/bash
for((i=1;i <= $#;i++))
do
echo $@
shift
done

변수 i 는 for 순환 카운터 로 서 순환 체 를 실행 할 때마다 모든 인 자 를 출력 하고 인 자 를 사용 shift 명령 으로 자 리 를 옮 깁 니 다.예상 한 실행 결 과 는 다음 과 같다.
A B C D E F
B C D E F
C D E F
D E F
E F
F

그러나 실제 집행 결 과 는 다음 과 같다.
[root@Centos7T blogscripts]#bash t5.sh A B C D E F
A B C D E F
B C D E F
C D E F

분명히 for 순환 체 는 세 번 만 실 행 했 습 니 다.그런데 문 제 는 어디 에 있 을까요?우 리 는 bash -x 디 버 깅 스 크 립 트 명령 을 사용 하여 스 크 립 트 의 운행 과정 을 다음 과 같이 관찰 합 니 다.
[root@Centos7T blogscripts]#bash -x t5.sh A B C D E F
+ (( i=1 ))
+ (( i <= 6 ))
+ echo A B C D E F
A B C D E F
+ shift
+ (( i++ ))
+ (( i <= 5 ))
+ echo B C D E F
B C D E F
+ shift
+ (( i++ ))
+ (( i <= 4 ))
+ echo C D E F
C D E F
+ shift
+ (( i++ ))
+ (( i <= 3 ))

변수 i 는 순환 이 실 행 될 때마다 1 이 증가 한 후에 판단 합 니 다 i <= $#.그러나 매번 판단 에서 변수 $# 의 값 이 계속 줄 어 들 면서 i = 4 일 때 i <= $# 가 가짜 로 판단 하고 순환 이 끝났다.그래서 순환 체 는 세 번 밖 에 집행 되 지 않 았 다.이 오 류 를 수정 하기 위해 서 우 리 는 변 수 를 제어 할 수 있 습 니 다. i 는 매번 순환 체 가 실 행 된 후에 증가 하지 않 습 니 다. 즉, i++ 명령 을 제거 하면 우리 가 원 하 는 결 과 를 얻 을 수 있 을 것 이 라 고 믿 습 니 다.
[root@Centos7T blogscripts]#cat t5.sh
#!/bin/bash
for((i=1;i <= $#;))
do
echo $@
shift
done

실행 결 과 는 다음 과 같 습 니 다.
[root@Centos7T blogscripts]#bash t5.sh A B C D E F
A B C D E F
B C D E F
C D E F
D E F
E F
F

물론, 기본 적 인 상황 에서 그것 shift 은 매개 변수 변 수 를 왼쪽으로 한 위 치 를 이동 합 니 다. 우 리 는 명령 행 매개 변 수 를 한 번 에 여러 위 치 를 이동 하 는 것 을 제어 할 수 있 습 니 다. shift 명령 에 하나의 매개 변 수 를 제공 하고 이동 할 위 치 를 가리 키 면 됩 니 다.예 를 들 어 shift 3 매번 실행 shift 3 할 때마다 명령 행 매개 변 수 는 왼쪽으로 3 자리 이동 하 는 동시에 삼촌 개 수 를 통계 하 는 변수 $# 도 3 자리 줄어든다.

좋은 웹페이지 즐겨찾기