셸 스 크 립 트 작성 조건 선택, 조건 판단, 순환 문
셸 스 크 립 트 를 작성 합 니 다. 일반적으로 조건 선택, 조건 판단, 순환 문 구 를 떠 날 수 없습니다.이 세 가지 문법 을 파악 하면 스 크 립 트 의 작성 효율 을 크게 향상 시 키 고 스 크 립 트 의 작성 을 더욱 유연 하 게 하 며 X 가 상대 적 으로 복잡 한 작업 을 완성 할 수 있 습 니 다.
2 조건 선택 if 문장
if 문 구 는 실행 을 선택 하고 조건 에 따라 판단 하 며 첫 번 째 로 '진짜' 조건 을 만 났 을 때 그 가 지 를 실행 한 다음 에 전체 if 문 구 를 끝 냅 니 다.
if 는 판독 조건 의 명령 의 종료 상태 에 따라 명령 을 수행 합 니 다. if 문 구 는 끼 워 넣 을 수 있 습 니 다.
단일 분기
if ;then
fi
두 갈래
if ; then
else
fi
여러 갈래
if 1; then
elif 2; then
elif 3; then
else
fi
예시
숫자 크기 비교 결과 진위 판단
read -p "Please input nu: " nu
[[ $nu =~ ^[0-9]+$ ]] || { echo "Your input is not num";exit 8; }
if [ "$nu" -gt 90 ];then
echo "$nu is bigger than 90"
elif [ "$nu" -lt 50 ];then
echo "$nu is less than 50"
else
echo "Your input $nu is between range 50-90"
fi
명령 실행 결과 진위 판단
read -p "please input ip: " ip
if ping -c 1 -W 1 $ip &>/dev/null; then
echo "$ip is up"
elif grep "$ip" /root/list &>/dev/null
then
echo "host "$ip" is under maitenance"
else echo "$ip is unexpectedly down,please check"
fi
3 조건 판단: case 문장
문법 은 다음 과 같다.
case ($var, $ ) in
PAT1)
1
;;
PAT2)
2
;;
......
*)
;;
esac
이 지점 x 는 명령 의 조합 일 수 있 습 니 다. 단순 한 명령 이 아 닙 니 다.
case 는 glob 스타일 의 마스크 를 지원 합 니 다:
*: 임의의 길이 임 의 문자
?: 임의의 단일 문자
[]: 지정 한 범위 내의 임의의 단일 문자
a | b: a 또는 b, 다른 문자 와 일치 하지만 같은 분기 명령 을 실행 하려 면 이 명령 으로 판단 을 간소화 할 수 있 습 니 다.
예시
#!/bin/bash
read -p "Please input your choice: " choice
final=`echo "$choice" |tr [[:upper:]] [[:lower:]]`
case $final in
y|yes)
echo "You input "$choice",and your choice is yes"
;;
n|no)
echo "You input "$choice",and your choice is no";
;;
y???es)
echo "You input $choice,it has three character between yes"
;;
[sunny])
echo "You input $choice,it only has one character"
;;
*)
echo "Your choice is $choice,it is not the answer"
;;
esac
캡 처 는 아래 와 같다.
4 순환 문
한 코드 세그먼트 를 여러 번 반복 적 으로 실행 합 니 다. 다음 세 개의 키워드 for, while, until 각자 의 문법 은 서로 다른 순환 문 구 를 구성 합 니 다.
그 속
for 기본적으로 목록 의 값 을 순서대로 실행 한 후 종료 합 니 다.
while 와 until 은 입장 조건 과 탈퇴 조건 이 있 습 니 다.
중복 운행 횟수 는 두 종류 가 있다
a. 순환 횟수 미리 알 고 있 음
b. 순환 횟수 미리 알 수 없 음
4.1 for circle
4.1.1 for 일반적인 목록 순환
문법 은 다음 과 같다.
for ( var, $ ) in ;do
( )
done
for 순환 실행 메커니즘:
목록 에 있 는 요 소 를 '변수 이름' 에 순서대로 할당 합 니 다.매번 값 을 부여 한 후 순환 체 를 실행 합 니 다.목록 에 있 는 요소 가 다 소 진 될 때 까지 순환 이 끝 납 니 다.
for 순환 목록 생 성 방식:
(1) 목록 바로 보 여주 기
(2) 정수 목록:
(a) {start..end}
(b) $(seq[start [step]] end)
(3) 목록 을 되 돌려 주 는 명령: $(COMMAND) 는 'COMMAND' 라 고 표현 할 수 있 으 며, 작은 따옴표 로 인해 발생 합 니 다.
(4) glob 사용, 예: *. sh
(5) 변수 참조; $@, $*
4.1.2 예:
4.1.2.1 리스트 형 직접 제시
i=1
for var in a b c d
do
echo "$i cycle the var is $var"
let i++
done
4.1.2.2 정수 목록: {start. end. step} 형
스텝 값 (step) 을 지정 하지 않 으 면 기본 값 은 스텝 1 입 니 다.
i=1
for var in {3..15..2}
do
echo "$i cycle the var is $var"
let i++
done
4.1.2.3 정수 목록: $(seq [start [step]] end) 형
\# seq end 라면 1 부터 end 까지 1 씩 증가 합 니 다.
\# seq start end 라면 start 부터 end 까지 매번 1 씩 증가 합 니 다.
\# seq [start] [step] [end] start 부터 step 를 늘 릴 때마다 end 까지
i=1
for var in $(seq 3 2 9)
do
echo "$i cycle the var is $var"
let i++
done
4.1.2.4 목록 을 되 돌려 주 는 명령 $(COMMAND) 형
for var in $(ls /root/)
do
echo "$i file is "$var", type is `file /root/$var`"
let i++
done
echo
4.1.2.5 glob 사용, 예 를 들 어 *. sh 또는/root/* 형
for var in /root/*
do
echo "$i file is "$var", type is `file $var`"
let i++
done
echo
4.1.2.6 변수 참조; $@, $*형.
for var in $@
do
echo "$i cycle,and now para is $1,var is $var,\$@ is $@"
let i++
shift
done
echo
4.1.3 for 순환 의 특수 형식:
문법 은 다음 과 같다.
for (( ; ; ))
do
done
제어 변수 초기 화: 순환 코드 세그먼트 로 실 행 될 때 만 실행 합 니 다.
변 수 를 제어 하 는 수정 식: 순환 이 끝 날 때마다 제어 변수 수정 연산 을 한 다음 조건 판단 을 합 니 다.
두 개의 작은 괄호 방법, 즉 (...) 형식 도 산술 연산 에 사용 할 수 있다.
두 개의 작은 괄호 방법 도 bash Shell 로 하여 금 C 언어 스타일 의 변 수 를 조작 하 게 할 수 있다. 예 를 들 어 (I +))
이 for 순환 의 실행 과정 은 다음 과 같다.
순환 에 들 어 갈 때 진 위 를 판단 하지 않 고 제어 변 수 를 초기 화 합 니 다.
그리고 집행 조건 판단 표현 식, 진 위 를 판단 하고 조건 이 진실 이 며 순환 에 들 어 갑 니 다.
실행 순환
반복 실행 후
집행 하 다. 변 수 를 제어 하 는 수정 식
그리고 조건 판단 식
집행 하 다. 변 수 를 제어 하 는 수정 식
그리고 조건 판단 표현 식,
.......
조건 이 충족 되 지 않 을 때 까지 표현 식 을 판단 한 후 순환 을 종료 합 니 다.
논리 도 는 아래 와 같다.
예시
read -p "Please input your nu to cal 1+2+...+nu: " nu
s=0
for ((i=1;i<=$nu;i=i+1))
do
s=$(($s+$i))
echo "it is the $i cycle."
done
echo "1+2...+$nu=$s"
위 스 크 립 트 는 디 버 깅 bash - x 결 과 를 통 해 다음 과 같이 캡 처 합 니 다.
4.2 while 순환
4.2.1 문법
while CONDITION( ); do
done
CONDITION: 순환 제어 조건;순환 에 들 어가 기 전에 먼저 판단 을 한다.매번 순환 한 후에 다시 판단 한다.
조건 이 "true"이면 순환 을 실행 합 니 다.조건 부 테스트 상태 가 "false"로 끝 날 때 까지 순환
따라서: CONDTION 은 일반적으로 순환 제어 변수 가 있어 야 합 니 다.이 변수의 값 은 순환 체 에서 끊임없이 수 정 됩 니 다.
입장 조건: CONDITION 은 true
종료 조건: CONDITION 은 false
4.2.2 while 순환 의 특수 한 용법:
4.2.2.1 파일 읽 기
while read line; do // , line ,
done
/PATH/FROM/SOMEFILE , line, ,
4.2.2.2 while
while, ,
| while read do
,
done
4.2.2.3 무한 순환 생 성while true; do
done
4.2.3 예
4.2.3.1 일반 순환 구구 곱셈 표i=1
while [ "$i" -lt 10 ];do
for (( j=1;j<="$i";j++)) do
echo -e -n "$i*$j=$[ $i*$j ]\t"
done
echo
let i++
done
4.2.3.2 문서 내용 읽 기
while 매번 입력 한 문서/root/tt 의 줄 마다 입력 을 처리 합 니 다. 이 줄 이 처리 되면,
모든 순환 이 끝 날 때 까지 문서 의 다음 줄 을 입력 하 십시오.i=1
while read line;do
echo "$i cycle is \$line is "
let i++
echo "$line" | grep gt
echo "$line" | sed -nr 's/useage=.*/for test sed/p'
echo
done
4.2.3.3
df|grep /dev/sd line。
df|grep /dev/sd | while read line;do
dev=`echo "$line"| cut -d " " -f1`
use=`echo "$line"| sed -r 's/.* ([0-9]+)%.*/\1/'`
if [ "$use" -gt 3 ];then
echo "Warning "$dev"'s usage is over 3%,it is $use,please check"
else
echo ""$dev"'s usage is safe,it is $use"
fi
done
4.2.3.4 순환 체 생 성
2 초 마다 hello 인쇄while true;do
echo hello
sleep 2
done
4.3 until
4.3.1 문법until CONDITION; do
done
입장 조건: CONDITION 은 false
종료 조건: CONDITION 은 true
until 은 while 와 반대로 until 로 이 루어 지 는 순환 으로 while 로 이 루어 질 수 있 으 므 로 until 로 알 아 보면 된다.
무한 순환 생 성until false; do
Done
4.3.2 예
4.3.2.1 일반 순환 까지
i 가 6 보다 클 때 순환 에 들 어가 거나 6 보다 작 을 때 순환 을 종료 합 니 다.i=10
until [ $i -le 6 ];do
echo \$i is $i,bigger than 6
let i--
echo "after i--,now i is $i"
echo
done
4.3.2.2 잘못된 순환 스 크 립 트
it is false 를 인쇄 하고 2 초 동안 자 요.until false ;do
echo "it is false"
sleep 2
done
작은 매듭
어떤 문법 을 사용 하여 순환 을 하거나 조건 선택 이나 조건 판단 을 하 는 지 는 구체 적 인 상황 에 따라 정 해 야 한다. 또한 개인 이 스 크 립 트 를 쓰 는 습관 에 따라 정 해 야 한다. 예 를 들 어 어떤 사람들 은 while 로 순환 문 구 를 쓰 는 것 을 좋아 하지만 한 가지 원칙 은 최대한 법 적 으로 잘 계산 하고 여러 번 의 순환 을 방지 하 며 대량의 자원 을 차지 하여 시스템 에 부담 을 주 는 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Case swappingCase swapping Description: Given a string, swap the case for each of the letters. e.g. CodEwArs --> cODeWaRS Examples 다른...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.