bash 프로 그래 밍 if... else 조건 판단

3753 단어 linuxbashif[shell]
1. if 의 단일 분기 문법 형식:
if     ;then
      1
      2
    ……
else
      1
      2
    ……
fi

2. if 의 다 분기 문법 형식:
if     ;then
      1
      2
    ……
elif
      1
      2
    ……
elif
      1
      2
    ……
else
      1
      2
    ……
fi

elif 여러 개 있 을 수 있어 요.
"판단 조건"필드 에 bash 명령 을 직접 쓸 수도 있 고 조건 테스트 로 쓸 수도 있 습 니 다.
판단 조건 에서 조건 테스트 를 진행 해 야 합 니 다:
조건 부 테스트 방식:
  • "[expression]"중 괄호 안에 표현 식 을 씁 니 다.
  • "expression"두 개의 중 괄호 안에 표현 식 을 써 라
  • “test expression”
  • "bash 명령"
  • 조건 부 테스트 의 종류:
  • 정수 테스트 expression: [수치 1 비교 문자 수치 2] 비교 부 호 는 일반적으로 다음 과 같은 몇 가지 가 있다. - lt (greater than) 보다 크 고 다음 과 같다. - ge (greater equal) 보다 크 고: lt (less than) 보다 작 으 며: le (less equal) 보다 작 으 며: - ne (not equal)
  • 과 같 지 않다.
  • 문자 테스트 "\>": "\"= "또는"= ":"같 음 "= ~": 왼쪽 문자열 이 오른쪽 패턴 에 일치 할 수 있 는 지 판단 하 는 데 사 용 됩 니 다. 보통 'expression' 단일 항목 테스트 에 사 용 됩 니 다. - z: 형식 은 "[- z $STRING]"이 고, 빈 값 일 때 는 진짜 이 며, 빈 값 이 아 닐 때 는 가짜 - n: 형식 은 "[n $STRING]"이 며, 빈 값 일 때 는 가짜 이 고, 빈 값 이 아 닐 때 는 진짜 입 니 다.
  • 파일, 디 렉 터 리 테스트 - d: 디 렉 터 리 존재 여부 테스트 - f: 파일 존재 여부 테스트
  • 조합 조건 테스트:
  • 여러 개의 테스트 조건 이 있 을 때 우 리 는 이러한 테스트 조건 을 조합 하여 사용 할 수 있다. - a: 논리 와 o: 논리 또는!: 논리 비, 이것 은 단일 항목 조작
  • bash 명령 간 조합 테스트 일 때: &: 논리 와 |: 논리 또는!: 논리 비
  • example:
    1. 사용자 가 관리자 인지 아 닌 지 를 테스트 하기 위해 스 크 립 트 를 작성 합 니 다. 관리자 라면 '사용자 이름 is admin' 을 표시 합 니 다. 시스템 사용자 가 '사용자 이름 is system user' 를 표시 한 것 이 라면 '사용자 이름 is common user' 를 표시 합 니 다.
    #!/bin/bash
    #
    Uid=`id -u $1 &> /dev/null`
    if [ -z $Uid ];then
            echo "No such user $1;"
            exit 8
    fi
    if [ $Uid -eq '0' ];then
            echo "$1 is admin."
    elif [ $Uid -gt '0' -a $Uid -lt '500' ];then //          
            echo "$1 is system user."
    elif [ $Uid -ge '500' ];then
            echo "$1 is common user."
    fi

    2. 사용자 의 셸 이/bin/bash 인지 스 크 립 트 를 작성 하여 테스트 합 니 다. "사용자 이름 is bash user"를 출력 하지 않 으 면 "사용자 이름 is no bash user"를 출력 합 니 다.
    #!/bin/bash
    #
    Bash=`grep "^$1\>" /etc/passwd | cut -d: -f7`
    if [ -z $Bash ];then
            echo "No such user $1."
            exit 9
    fi
    if [ $Bash == "/bin/bash" ];then
            echo "$1 is bash user."
    else
            echo "$1 is not bash user."
    fi

    3. 백업 스 크 립 트 를 작성 하여 "gzip, bzip 2, xz"인 자 를 스 크 립 트 에 전달 하고 스 크 립 트 에 해당 하 는 압축 도 구 를 호출 하여 백업 파일 을 압축 합 니 다. 사용자 가 주어진 인자 가 없 을 때 gzip 을 호출 하여 압축 합 니 다./etc 디 렉 터 리 에 있 는 모든 파일 을 압축 한 후/backup 디 렉 터 리 에 백업 합 니 다. 백업 파일 이름 은 "etc - 날짜 - 시간"형식 입 니 다.
    #!/bin/bash
    #
    Com=$1
    [ -z /backup ] || mkdir /backup &> /dev/null //  /backup    
    if [ -z $Com ];then
            Com=gzip
    fi
    if [ $Com == 'gzip' ];then
            tar zcf /backup/etc-`date +%F-%H:%M:%S.tar.gz` /etc/* &> /dev/null
            [ $? == 0 ] && echo "Backup etc finished.(gzip)."
    elif [ $Com == 'bzip2' ];then
            tar jcf /backup/etc-`date +%F-%H:%M:%S.tar.bz2` /etc/* &> /dev/null
            [ $? == 0 ] && echo "Backup etc finished.(bz2)."
    elif [ $Com == 'xz' ];then
            tar Jcf /backup/etc-`date +%F-%H:%M:%S.tar.xz` /etc/* &> /dev/null
            [ $? == 0 ] && echo "Backup etc finished.(xz)."
    else
            echo "Usage:`basename $0` {[gzip|bzip2|xz]}"
            exit=7
    fi

    이 스 크 립 트 는 centos 5.8 에서 tar 가 아 닌 xz 압축 도 구 를 사용 하여 작업 할 수 없습니다. man tar 는 옵션 에 'J' 옵션 이 없 지만 centos 6.2 에서 정상적으로 작업 할 수 있 습 니 다. tar 버 전 문제 일 것 입 니 다.

    좋은 웹페이지 즐겨찾기