셸 프로 세 스 제어

7984 단어 shell흐름컨트롤
자바,PHP 등 언어 와 달리 sh 의 프로 세 스 제어 가 비어 있 으 면 안 됩 니 다.예 를 들 어(다음은 PHP 프로 세 스 제어 쓰기):

<?php
if (isset($_GET["q"])) {
 search(q);
}
else {
 //       
}
sh/bash 에 서 는 이렇게 쓰 면 안 됩 니 다.else 분기 에 문장 이 실행 되 지 않 으 면 이 else 를 쓰 지 마 세 요.
if else
if
if 구문 문법 형식:

if condition
then
 command1 
 command2
 ...
 commandN 
fi
한 줄 로 쓰기(터미널 명령 프롬프트 에 적용):

if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
마지막 fi 는 if 를 거꾸로 쓰 면 비슷 한 것 을 만 날 수 있 습 니 다.
if else
if else 문법 형식:

if condition
then
 command1 
 command2
 ...
 commandN
else
 command
fi
if else-if else
if else-if else 문법 형식:

if condition1
then
 command1
elif condition2 
then 
 command2
else
 commandN
fi
다음 인 스 턴 스 는 두 변수 가 같 는 지 여 부 를 판단 합 니 다.

a=10
b=20
if [ $a == $b ]
then
 echo "a    b"
elif [ $a -gt $b ]
then
 echo "a    b"
elif [ $a -lt $b ]
then
 echo "a    b"
else
 echo "       "
fi
출력 결과:
a 보다 작 음 b
if else 문 구 는 test 명령 과 자주 결합 하여 사용 합 니 다.다음 과 같 습 니 다.

num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
 echo '      !'
else
 echo '       !'
fi
출력 결과:
두 숫자 가 같다!
for 순환
다른 프로 그래 밍 언어 와 유사 합 니 다.Shell 은 for 순환 을 지원 합 니 다.
for 순환 일반 형식:

for var in item1 item2 ... itemN
do
 command1
 command2
 ...
 commandN
done
한 줄 로 쓰기:

for var in item1 item2 ... itemN; do command1; command2… done;
변수 값 이 목록 에 있 을 때 for 순환 은 모든 명령 을 한 번 실행 하고 변수 이름 으로 목록 의 현재 값 을 가 져 옵 니 다.명령 은 모든 유효한 셸 명령 과 문 구 를 위 한 것 입 니 다.in 목록 은 교체,문자열,파일 이름 을 포함 할 수 있 습 니 다.
in 목록 은 선택 할 수 있 습 니 다.사용 하지 않 으 면 for 는 명령 행 의 위치 변 수 를 순환 적 으로 사용 합 니 다.
예 를 들 어 현재 목록 의 숫자 를 순서대로 출력 합 니 다.

for loop in 1 2 3 4 5
do
 echo "The value is: $loop"
done
출력 결과:
The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5
순차 출력 문자열 의 문자:

for str in 'This is a string'
do
 echo $str
done
출력 결과:
This is a string
while 구문
while 순환 은 일련의 명령 을 계속 실행 하 는 데 사용 되 며 입력 파일 에서 데 이 터 를 읽 는 데 도 사 용 됩 니 다.명령 은 보통 테스트 조건 이다.그 형식 은:

while condition
do
 command
done
다음은 기본 적 인 while 순환 입 니 다.테스트 조건 은 int 가 5 보다 작 으 면 조건 이 진짜 로 돌아 갑 니 다.int 는 0 부터 순환 처리 할 때마다 int 에 1 을 추가 합 니 다.위 스 크 립 트 를 실행 하고 숫자 1 부터 5 까지 되 돌려 주 고 종료 합 니 다.

#!/bin/bash
int=1
while(( $int<=5 ))
do
 echo $int
 let "int++"
done
스 크 립 트 실행,출력:
1
2
3
4
5
상기 실례 는 Bash let 명령 을 사 용 했 습 니 다.이것 은 하나 이상 의 표현 식 을 실행 하 는 데 사 용 됩 니 다.변수 계산 에$를 더 해서 변 수 를 표시 할 필요 가 없습니다.
while 순환 은 키보드 정 보 를 읽 는 데 사용 할 수 있 습 니 다.다음 예 에서 입력 정 보 는 변수 FILM 으로 설정 되 어를 누 르 면 순환 을 끝 냅 니 다.

echo '   <CTRL-D>   '
echo -n '          : '
while read FILM
do
 echo "  !$FILM       "
done
스 크 립 트 를 실행 합 니 다.출력 은 다음 과 같 습 니 다:
를 누 르 고 종료
당신 이 가장 좋아 하 는 사이트 이름 을 입력 하 세 요:우리
네!우 리 는 좋 은 사이트 다.
무한 순환
무한 반복 문법 형식:

while :
do
 command
done
혹은

while true
do
 command
done
혹은

for (( ; ; ))
until...까지 순환
조건 이 true 일 때 까지 일련의 명령 을 반복 해서 실행 합 니 다.
until 순환 은 while 순환 과 처리 방식 이 정반 대 입 니 다.
일반적으로 while 순환 은 until 순환 보다 좋 지만,때로는 극소수 일 뿐,until 순환 은 더욱 유용 하 다.
until 문법 형식:

until condition
do
 command
done
condition 은 일반적으로 조건 식 입 니 다.값 이 false 로 되 돌아 오 면 체 내 문 구 를 계속 실행 합 니 다.그렇지 않 으 면 순환 이 됩 니 다.
다음 인 스 턴 스 는 until 명령 을 사용 하여 0~9 의 숫자 를 출력 합 니 다.

#!/bin/bash

a=0

until [ ! $a -lt 10 ]
do
 echo $a
 a=`expr $a + 1`
done
실행 결과:
출력 결 과 는:
0
1
2
3
4
5
6
7
8
9
case
Shell case 문 구 는 다 중 선택 문 입 니 다.케이스 문 구 를 사용 하여 하나의 패턴 과 값 을 일치 시 킬 수 있 습 니 다.일치 하면 일치 하 는 명령 을 수행 할 수 있 습 니 다.case 구문 형식 은 다음 과 같 습 니 다.

case   in
  1)
 command1
 command2
 ...
 commandN
 ;;
  2)
 command1
 command2
 ...
 commandN
 ;;
esac
케이스 작업 방식 은 위 와 같다.값 을 얻 으 려 면 단어 in 이 어야 합 니 다.모든 모드 는 오른쪽 괄호 로 끝나 야 합 니 다.수 치 는 변수 나 상수 일 수 있다.일치 하 는 값 이 특정한 모드 에 부합 되 는 것 을 발견 하면 그 동안 모든 명령 이 실 행 될 때 까지 실 행 됩 니 다.
값 을 추출 하면 일치 하 는 모든 모드 를 검사 합 니 다.패턴 이 일치 하면 일치 모드 에 해당 하 는 명령 을 실행 한 후 다른 모드 를 계속 하지 않 습 니 다.일치 하 는 모드 가 없 으 면 별표*로 이 값 을 캡 처 하고 다음 명령 을 수행 합 니 다.
다음 스 크 립 트 알림 은 1 부터 4 까지 입력 하여 각 모드 와 일치 합 니 다.

echo '   1   4      :'
echo '       :'
read aNum
case $aNum in
 1) echo '     1'
 ;;
 2) echo '     2'
 ;;
 3) echo '     3'
 ;;
 4) echo '     4'
 ;;
 *) echo '      1   4      '
 ;;
esac
다른 내용 을 입력 하면 다른 결과 가 있 습 니 다.예 를 들 어:
1 에서 4 사이 의 숫자 를 입력 하 십시오:
입력 한 숫자 는:
3
너 는 3 을 선택 했다.
점프 순환
순환 과정 에서 순환 종료 조건 에 이 르 지 못 했 을 때 순환 을 강제로 꺼 내야 할 때 가 있 습 니 다.Shell 은 두 개의 명령 을 사용 하여 이 기능 을 실현 합 니 다.break 와 contine.
break 명령
break 명령 은 모든 순환 을 뛰 어 넘 을 수 있 습 니 다.
다음 예 에서 스 크 립 트 는 사용자 의 입력 숫자 가 5 보다 클 때 까지 순환 합 니 다.이 순환 을 벗 어 나 셸 프롬프트 로 돌아 가 려 면 break 명령 을 사용 해 야 합 니 다.

#!/bin/bash
while :
do
 echo -n "   1   5      :"
 read aNum
 case $aNum in
  1|2|3|4|5) echo "        $aNum!"
  ;;
  *) echo "         1   5    !     "
   break
  ;;
 esac
done
상기 코드 를 실행 하고 출력 결 과 는 다음 과 같 습 니 다.
1 에서 5 사이 의 숫자 입력:3
네가 입력 한 숫자 는 3 이다!
1 에서 5 사이 의 숫자 를 입력 하 십시오:7
네가 입력 한 숫자 는 1 에서 5 사이 가 아니 야!게임 종료
continue
contine 명령 은 break 명령 과 유사 합 니 다.약간의 차이 만 있 습 니 다.모든 순환 을 뛰 어 넘 지 않 고 현재 순환 만 뛰 어 넘 습 니 다.
위의 예 를 수정 합 니 다.

#!/bin/bash
while :
do
 echo -n "   1   5      : "
 read aNum
 case $aNum in
  1|2|3|4|5) echo "        $aNum!"
  ;;
  *) echo "         1   5    !"
   continue
   echo "    "
  ;;
 esac
done
실행 코드 는 5 이상 의 숫자 를 입력 할 때 이 사례 의 순환 이 끝나 지 않 고 문장 echo'게임 끝'은 영원히 실행 되 지 않 는 다 는 것 을 발견 했다.
case ... esac
case...esac 는 다른 언어 에서 switch...case 문장 과 유사 하 며 다 분지 선택 구조 입 니 다.각 case 지점 은 오른쪽 괄호 로 시작 하고 두 개의 지점 으로 시작 합 니 다.break,즉 실행 종료,전체 case...esac 문 구 를 뛰 어 내 리 는 것 을 의미 합 니 다.esac(즉 case 거꾸로)는 끝 표시 로 합 니 다.
case...esac 문법 형식 은 다음 과 같 습 니 다.

case   in
  1)
 command1
 command2
 command3
 ;;
  2)
 command1
 command2
 command3
 ;;
*)
 command1
 command2
 command3
 ;;
esac
케이스 후 값 을 추출 합 니 다.값 은 변수 나 상수 일 수 있 습 니 다.
값 후 키워드 in 입 니 다.다음은 일치 하 는 여러 가지 모드 입 니 다.모든 모드 는 마지막 으로 오른쪽 괄호 로 끝내 야 합 니 다.모드 는 정규 표현 식 을 지원 합 니 다.

#!/bin/sh

site="jb51"

case "$site" in
 "jb51") echo "  "
 ;;
 "google") echo "Google   "
 ;;
 "taobao") echo "   "
 ;;
esac
출력 결 과 는:
우리.
이상 은 Shell 프로 세 스 제어 에 대한 상세 한 내용 입 니 다.Shell 프로 세 스 제어 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!

좋은 웹페이지 즐겨찾기