bash 프로 그래 밍 if 구문
4835 단어 shell;if;else
사용법:
if 조건 테스트;then
문장 1
문장 2
……
fi
설명: if 뒤의 조건 테스트 에서 되 돌아 오 는 상태 코드 가 0 이면 프로그램 체 의 문 구 를 실행 합 니 다.되 돌아 오 는 상태 코드 가 0 이 아니면 종료 합 니 다.
조건 부 테스트: bash 명령 과 "[]"테스트 를 포함 하여 여러 가지 형식 이 있 습 니 다.
예 1: 파일 이 존재 하 는 지 여 부 를 판단 하고 존재 한다 면 이 파일 이 존재 하 는 지 입력 하 십시오. 존재 한다 면 출력 파일 이 존재 합 니 다.
#!/bin/bash
#
PATH=PATH:/root/bin
if test �Ce /etc/passwd;then
echo “file exsit”
fi
첫 줄 의\#!/빈/bash 는 이 스 크 립 트 가 사용 하 는 셸 이름 을 설명 한 다음\# 로 시작 하 는 줄 을 모두 주석 줄 로 합 니 다.
여기 조건 테스트 는 test ㎡ Ce 입 니 다. /etc/passwd,/etc/passwd 가 존재 하 는 지 판단 하 는 데 사 용 됩 니 다. 존재 한다 면 이 명령 이 돌아 오 는 상태 값 은 0 입 니 다. (이 명령 을 단독으로 실행 한 후 $를 사용 할 수 있 습 니까? 반환 값 을 볼 수 있 습 니 다)
예 2: 스 크 립 트 를 작성 하여 사용자 이름 이 존재 하면 UID 와 셸 을 표시 합 니 다.
#!/bin/bash
#
User=user1
if id $User&> /dev/null;then
grep "$User" /etc/passwd | cut -d":" -f3,7
fi
이 조건 테스트 는 id $User 입 니 다. user 1 이 존재 한다 면 id $User 라 는 bash 명령 은 성공 적 으로 실 행 됩 니 다. 상태 값 을 0 으로 되 돌려 줍 니 다. 그러나 우 리 는 그 가 성공 한 결 과 를 알 필요 가 없습니다. 그래서 우 리 는 이 를/dev/null 로 재 설정 합 니 다. 프로그램 체 의 문 구 는 grep 에서 캡 처 한 줄 을 cut 명령 으로 보 내 고 ':' 을 분할 문자 로 합 니 다.그 중 세 번 째 필드 와 일곱 번 째 필드 를 취하 여 표시 합 니 다.
예 3:/etc/rc. d/rc. sysinit 에 빈 줄 이 있 으 면 줄 수 를 표시 합 니 다.
#!/bin/bash
#
if grep"^$" /etc/rc.d/rc.sysinit &> /dev/null;then
grep "^$" /etc/rc.d/rc.sysinit |wc -l
fi
'^' 는 줄 의 첫 번 째 닻 을 의미 하고 '$' 는 줄 의 끝 닻 을 의미 하 며 '^ $' 줄 의 첫 번 째 와 줄 의 끝 에 문자 가 없 으 면 공백 줄 입 니 다.'wc - l' 의 역할 은 grep 가 수집 한 줄 의 수 를 통계 하 는 데 쓰 인 다.
2. if - else - then 문 구 를 사용 합 니 다 (두 갈래)
사용법
if 조건 테스트;then
문장 1
문장 2
……
else
문장 1
문장 2
……
fi
설명: if 뒤의 조건 테스트 에서 되 돌아 오 는 상태 코드 가 0 이면 프로그램 체 의 문 구 를 실행 합 니 다.되 돌아 오 는 상태 코드 가 0 이 아니라면 else 아래 프로그램 체 의 문 구 를 실행 합 니 다.
예 4: 사용자 가 존재 하 는 것 을 지정 하면 ID 번호 와 셸 을 먼저 설명 하고 표시 합 니 다.그렇지 않 으 면 사용 자 를 추가 하고 ID 를 표시 합 니 다.
#!/bin/bash
#
User=user2
if id $User&> /dev/null;then
echo "$User exist"
grep "$User" /etc/passwd | cut -d":" -f3,7
else
useradd $User
grep "$User" /etc/passwd | cut -d":" -f3
fi
예 5: 장치/dev/sda 3 가 마 운 트 되 어 있 으 면 마 운 트 지점 을 표시 합 니 다.그렇지 않 으 면 마 운 트 되 지 않 았 음 을 설명 합 니 다.
#!/bin/bash
#
Device=/dev/sda3
if mount | grep"$Device" &> /dev/null;then
grep "$Device" | cut -d"" -f3
else
echo "$Device is not exist"
fi
3. bash 조건 테스트
1. 정수 테스트
2. 문자 테스트
3. 파일 테스트
정수 테스트: 수치 1 비교 기호 수치 2
비교 기호:
-ge: 같 음 (equal)
-ne: 같 지 않 음 (같 지 않 음)
-lt: 이상 (greater than)
-lt: 이하 (less than)
-ge: 같 음 (greater than or equal)
-le: 이하 (less than or equal)
예 6: 두 정수 가 크기 를 비교 하고 수출 이 비교적 크다.
주: $RANDOM 사용 내장 변수 임 의 생 성 정수
#!/bin/bash
#
A=$RANDOM
B=$RANDOM
if [ $A -ge $B];then
echo "Max num is $A"
else
echo "Max num is $B"
fi
주의: [] 에서 판단 식 과 괄호 사이 에 i 의 그것 은 빈 칸 이 있어 야 합 니 다.
예 7: 하나의 정 수 를 무 작위 로 하여 그 패 리 티 를 판단 한다.
#!/bin/bash
#
A=$RANDOM
if [ $[$A%2] -eq 0];then
echo "$A is even"
else
echo "$A is odd"
fi
문자 테스트: 문자열 1 비교 기호 문자열 2
비교 기호:
>:... 보다 크다
<:... 보다 작다
==:... 과 같다
예 8: 주어진 사용자 의 셸 이/bin/bash 인지 판단 합 니 다.
#!/bin/bash
#
User=user1
Shell=`grep"$User" /etc/passwd | cut -d ":" -f7`
if [ $Shell =="/bin/bash" ];then
echo "$User is a bash user"
else
echo "$User is not a bash user"
fi
파일 테스트: test [옵션] filename 을 주로 사용 합 니 다.
파일 형식:
-e: 파일 이름 이 존재 하 는 지 여부
-f: 파일 이름 이 존재 하고 파일 인지 여부
-d: 파일 이름 이 존재 하고 디 렉 터 리 인지 여부
-b: 파일 이름 이 존재 하고 블록 장치 인지 여부
-c: 파일 이름 이 존재 하고 문자 장치 인지 여부
-S: 파일 이름 이 존재 하고 Socket 파일 인지 여부
-p: 파일 이름 이 존재 하고 FIFO 파일 인지 여부
-L: 파일 이름 이 존재 하고 링크 파일 인지 여부
파일 권한:
-r: 읽 기 권한
-쓰기 권한
-x: 실행 가능 한 권한
-u: SUID 권한
-g: SGID 권한
-s: 비 공백 파일
파일 비교: file 1 비교 기호 file 2
-nt: file 1 이 file 2 보다 새 것 인지 여부
-ot: file 1 이 file 2 보다 오래된 지 여부
-ef: file 1 과 file 2 가 같은 파일 인지 여부
문자 판정:
-z $string: string 이 빈 문자열 이면 true 입 니 다.
-n $string: string 이 빈 문자열 이면 결 과 는 fasle 입 니 다.
4. if - elif - else - then - else 문 구 를 사용 합 니 다 (다 분기)
사용법
if 조건 1;then
문장 1
문장 2
……
elif 조건 2;then
문장 1
문장 2
……
else
문장 1
문장 2
……
fi