Bash 스 크 립 트 의 if, case, read 와 위치 매개 변수
우선, 셸 스 크 립 트 프로 그래 밍 은 프로 세 스 프로 그래 밍 언어 입 니 다. 즉, 셸 스 크 립 트 는 다음 에 실행 할 절 차 를 강조 합 니 다. 마치 사람 이 셸 에 게 다음 에 무엇 을 해 야 하 는 지, 모든 방법 을 명확 하 게 지적 해 야 합 니 다.그리고 셸 은 스 크 립 트 류 언어 입 니 다. 컴 파일 이 필요 없고 직접 실행 할 수 있 으 며 해석 기 에서 설명 할 수 있 기 때문에 해석 형 언어 입 니 다.따라서 셸 스 크 립 트 는 프로 세 스 프로 그래 밍 언어 로 왼쪽 에서 오른쪽으로, 위 에서 아래로 모든 문 구 를 순서대로 실행 합 니 다. 즉 명령 입 니 다.
셸 스 크 립 트 는 기본적으로 순서대로 실행 되 지만 필요 할 때 점프 를 해서 선택 과 순환 이라는 두 가지 실행 구 조 를 실현 할 수 있 습 니 다.실행 구 조 를 선택 하려 면 "if"또는 "case"명령 을 사용 하 십시오.그 중에서 'if' 는 논리 적 으로 판단 한 결과 에 따라 선택 하고 'case' 는 선택 할 수 있 는 수치 에 따라 선택 합 니 다.먼저 "if"문 구 를 말 합 니 다.
형식 은 한 줄 에 쓸 수 있 습 니 다:
if ; then ; [ elif ; then ; ]... [ else ; ] fi
조건 이 사실 이 라면 then 후의 명령 을 실행 합 니 다. 그렇지 않 으 면 어떠한 조작 도 하지 않 습 니 다.
if 문 구 는 여러 줄 형식 으로 쓸 수 있 고 더욱 직관 적 으로 보인다 (분 호 는 생략 할 수 있다).
if CONDITION #CONDITION ,
then STATEMENT #STATEMENT ( ),
fi
if CONDITION ; then #
# “then” “if” “;”。
STATEMENT1
STATEMENT2
...
fi
위의 구 조 는 단일 분기 구조 로 조건 이 만족 할 때 만 실행 한 다 는 뜻 이다. 그 다음 에 두 가지 분기 구 조 를 말한다. 이 구조 에서 조건 이 진실 이 라면 then 뒤의 명령 을 집행 한다. 그렇지 않 으 면 else 뒤의 명령 을 집행 한다. 즉, 조건 이 어떻든 지 간 에 하나의 명령 이 실 행 될 것 이다. 조건 이 만족 하지 않 을 때 'if' 문 구 를 건 너 뛰 는 것 이 아니다.형식 은 다음 과 같 습 니 다.
if CONDITION ; then
STATEMENT
...
else
STATEMENT
...
fi
두 갈래 구조 보다 더 상세 한 것 은 여러 갈래 구조 로 이 구 조 는 조건 에 대한 설명 이 더욱 상세 하고 여러 가지 상황 에 대응 할 수 있다.먼저 CONDITION 1 이 진짜 인지 아 닌 지 를 판단 하고 진짜 라면 첫 번 째 then 뒤의 문 구 를 실행 합 니 다.그렇지 않 으 면 CONDITION 2 가 진짜 인지 아 닌 지 를 판단 하고 진짜 라면 두 번 째 then 뒤의 문 구 를 실행 합 니 다.그렇지 않 으 면 CONDITION 3 이 진짜 인지 아 닌 지 를 판단 하고 진짜 라면 세 번 째 then 뒤의 문 구 를 실행 합 니 다.모든 CONDITION 이 가짜 라면 else 뒤의 문 구 를 실행 합 니 다.형식:
if CONDITION1 ; then
STATEMENT
...
elif CONDITION2 ; then
STATEMENT
...
elif CONDITION3 ; then
STATEMENT
...
...
else
STATEMENT
...
fi
다음은 여러 갈래 로 스 크 립 트 를 작성 하고 그 안 은 다음 과 같 습 니 다 (스 크 립 트 실행 과정 은 원래 쓴 블 로그: Bash 스 크 립 트 참조).
#!/bin/bash
read -p " " Get#
if [ $Get -gt 5 ] ; then# ( :shell ——test)
echo " 5"
elif [ $Get -lt 5 ] ; then
echo " 5"
else echo " 5"
fi
if 문 구 는 fi 로 끝나 야 합 니 다.
[root@localhost blog]# bash iftest
3
5
[root@localhost blog]# bash iftest
6
5
[root@localhost blog]# bash iftest
5
5
if 후 에는 test 문 구 를 따라 갈 수도 있 고 명령 을 따라 갈 수도 있 습 니 다. 명령 이 라면 이 명령 이 성공 적 으로 실행 되 었 는 지 판단 하 는 것 입 니 다. 성공 하면 다음 명령 을 실행 합 니 다. 그렇지 않 으 면 'else' 를 실행 합 니 다. 예 를 들 어:
스 크 립 트 를 작성 합 니 다. 아래 내용 이 포함 되 어 있 습 니 다.
#!/bin/bash
if ls test ; then
echo "test "
else echo "test "
fi
그리고 이 스 크 립 트 를 실행 합 니 다:
[root@localhost blog]# bash ifcom
ls: test:
test # test ,
# “ls test”
# if else
[root@localhost blog]# touch test
[root@localhost blog]# bash ifcom
test
test
이 스 크 립 트 를 실행 하 는 과정 에서 우 리 는 우리 가 필요 로 하지 않 는 많은 내용 을 출력 한 것 을 발견 할 수 있 습 니 다. 그래서 우 리 는 스 크 립 트 를 다음 과 같이 수정 하여 이 쓸모없는 정 보 를 삭제 할 수 있 습 니 다.
#!/bin/bash
if ls test&>/dev/null ; then
# if “/dev/null” ,
# if
echo "test "
else echo "test "
fi
if 는 아마 이러한 사용 방법 일 것 입 니 다. 다음은 "case"명령 을 말 하 겠 습 니 다."case"명령 은 다 중 분기 선택 구조 입 니 다. 형식 은 다음 과 같 습 니 다.
case in [ [| ]...) ;;]... esac
또는 구조 적 인 형식 으로 쓴다.
case in
[ [| ]...) ;;]
...
esac
모드 (PATTERN) 는 다음 과 같 을 수 있 습 니 다.
1. 일반 텍스트 문자
2. globbing 스타일 의 마스크:
*: 임의의 길이 임 의 문자
?:임의의 단일 문자
[]: 범위 내의 임의의 단일 문자
[^]: 범위 밖의 임의의 단일 문자
3. |: 또는
이 모드 와 일치 하면 이 ")"다음 명령 을 실행 합 니 다. 두 개의 연속 적 인 분점 을 만 날 때 까지 ";".예 를 들 면:
스 크 립 트 를 만 든 다음 스 크 립 트 에 다음 내용 을 기록 합 니 다.
#!/bin/bash
read -p " a、b、c :" Get
case $Get in
a)
echo " a"
;;
b)
echo " b"
;;
c)
echo " c"
;;
esac
[root@localhost blog]# bash case
a、b、c :b
b
이 스 크 립 트 에 서 는 같은 문자 만 일치 합 니 다. 예 를 들 어:
스 크 립 트 를 만 든 다음 스 크 립 트 에 다음 내용 을 기록 합 니 다.
#!/bin/bash
read -p " :" Get
case $Get in
[[:digit:]])
echo " "
;;
[[:alpha:]])
echo " "
;;
*)
echo " , "
;;
esac
[root@localhost blog]# bash caseMode
:s
[root@localhost blog]# bash caseMode
:1
[root@localhost blog]# bash caseMode
:%
,
이 스 크 립 트 에서 패턴 을 사용 하여 일치 합 니 다. 이 모드 는 이전 예 와 조합 하여 사용 할 수 있 습 니 다.그 중에서 마지막 옵션 에 '*' 라 는 문 자 를 사 용 했 습 니 다. 임 의 를 대표 합 니 다. 즉, 위의 어떠한 조건 도 만족 하지 않 을 때 이 옵션 을 실행 하 는 것 입 니 다.이 를 통 해 알 수 있 듯 이 케이스 는 if 보다 더 편리 하 게 사용 할 수 있 으 며, 적어도 if 보다 형식 이 뚜렷 해 보인다.
위 에 제 시 된 모든 bash 스 크 립 트 는 read 명령 을 사용 하여 변수 데 이 터 를 읽 습 니 다. 다음은 "read"라 는 명령 을 말 합 니 다.
사용 형식:
read [-a ] [-p ] [-t ] [ ...]
이름 은 보통 변수 이름 이나 그룹 이름 입 니 다.이름 을 쓰 지 않 으 면 시스템 은 읽 은 정 보 를 REPLY 변수 에 저장 합 니 다.예 를 들 면:
[root@localhost blog]# read a
123
[root@localhost blog]# echo $a
123
[root@localhost blog]# read
456
[root@localhost blog]# echo $REPLY
456
"- a"옵션 은 입력 배열 입 니 다.
"- p"옵션 은 데 이 터 를 읽 을 때 힌트 를 주기 위해 서 입 니 다. read 명령 을 사용 하기 전에 echo 명령 으로 줄 을 바 꾸 지 않 는 문 자 를 출력 하 는 것 과 같 습 니 다. 예 를 들 어:
[root@localhost blog]# read -p " :"
:123
[root@localhost blog]# echo -n " :" ; read # “;” ( —— )
:123
'- t' 옵션 은 일정 시간 을 기다 리 는 것 입 니 다. 그 동안 입력 하지 않 으 면 read 명령 을 건 너 뛰 고 다음 명령 을 수행 합 니 다.이 명령 은 리 눅 스 의 철학 사상 을 실현 했다. 즉, 사용자 와 상호작용 을 하지 않 고 자동화 처 리 를 실현 하 는 것 이다.그러나 이 옵션 을 사용 할 때 주의해 야 합 니 다. - t 옵션 을 사용 하여 시간 초과 시간 을 정의 하면 주어진 변수 가 비어 있 는 지 뒤에서 판단 해 야 합 니 다. 비어 있 으 면 변수 에 기본 값 을 제공 해 야 합 니 다.
"- s"옵션 은 디 스 플레이 를 닫 는 것 입 니 다. 이 옵션 은 입력 할 때 입력 한 내용 을 표시 하지 않 습 니 다.
이상 은 read 에서 흔히 볼 수 있 는 용법 과 옵션 입 니 다. 그러나 이것 은 스 크 립 트 가 실 행 된 후에 이 루어 진 할당 입 니 다. 우 리 는 스 크 립 트 가 실 행 될 때 까지 할당 할 수 있 습 니 다.스 크 립 트 가 실 행 될 때 스 크 립 트 에 사용 할 수 있 는 변 수 를 전달 하 는 것 입 니 다.스 크 립 트 에 위치 매개 변수 가 존재 합 니 다: $1, $2, $3... 이 변 수 는 셸 스 크 립 트 에서 직접 참조 할 수 있 습 니 다. 서로 다른 숫자 는 스 크 립 트 가 실 행 될 때 스 크 립 트 이름 뒤에 따 르 는 몇 번 째 매개 변수 에 대응 합 니 다. 이 매개 변 수 는 빈 칸 으로 구분 합 니 다.셸 스 크 립 트 를 작성 할 때 $1 을 사용 하여 호출 합 니 다. 예 를 들 어:
스 크 립 트 를 만 든 다음 스 크 립 트 에 다음 내용 을 기록 합 니 다.
#!/bin/bash
echo " $1"
echo " $2"
echo " $3"
[root@localhost blog]# bash bianliang a b c
a
b
c
위치 파 라 메 터 를 사용 할 때 shift [n] 명령 에 맞 출 수 있 습 니 다. 이 명령 의 기능 은 위치 파 라 메 터 를 왼쪽으로 이동 시 키 고 명령 뒤에 숫자 를 매개 변수 로 하 는 것 입 니 다. 없 으 면 기본 값 은 1 입 니 다. 명령 을 실행 한 후에 위치 파 라 메 터 를 왼쪽으로 이동 시 켜 주 는 숫자 가 그렇게 많 습 니 다. 이렇게 말 하면 이해 하지 못 할 수도 있 습 니 다. 예 를 들 어:
스 크 립 트 에 다음 내용 을 기록 합 니 다:
#!/bin/bash
echo \$1:$1
shift
echo \$1:$1
[root@localhost blog]# bash shift a b
$1:a
$1:b
이 스 크 립 트 에서 우 리 는 첫 번 째 위치 매개 변수 인 $1 에 대한 값 을 'a' 입 니 다. 첫 번 째 줄 에서 출력 한 것 은 a 입 니 다. 두 번 째 줄 의 명령 인 'shift' 를 통 해 위치 매개 변수 중의 내용 을 기본 한 자리 로 왼쪽으로 이동 한 다음 에 $1 을 출력 하면 원래 의 두 번 째 매개 변수 인 'b' 가 됩 니 다.
숫자 로 인 용 된 위치 매개 변 수 를 제외 하고 특수 기 호 를 사용 하여 인 용 된 특수 기능 을 가 진 변수 도 있 습 니 다.
$#:모든 위치 매개 변수의 총수;
$*:제 시 된 모든 위치 매개 변수의 목록;인용 부 호 를 사용 할 때 전체 매개 변수 목록 은 문자열 로 사 용 됩 니 다.
$@:제 시 된 모든 위치 매개 변수의 목록;두 따옴표 참조 가 있 을 때 매개 변 수 는 단독 문자열 로 존재 합 니 다.
$0: 실 행 된 스 크 립 트 파일 의 경로 (현재 실 행 된 스 크 립 트 의 이름);
예 를 들 면:
이전 스 크 립 트 를 다음 내용 으로 변경 합 니 다.
#!/bin/bash
echo "\$#:$#"
echo "\$*:$*"++
echo "\$@:$@"
echo "\$0:$0"
[root@localhost blog]# bash bianliang a b c
$#:3
$*:a b c
$@:a b c
$0:bianliang
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Unity3D 시작하기(rolling ball) - 학습 노트만약 이 방법이 성공하지 못하면 각 구성 요소를 분류하여 다운로드할 수 있습니다. 항목은 3D를 선택하고 가져온 리소스는 None으로 선택할 수 있습니다. Scene: 각 게임마다 몇 개의 장면으로 구성되어 있으며,...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.