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 자리 줄어든다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.