셸 프로 그래 밍 제어 문 및 예시
리 눅 스 시스템 관리 과정 에서 셸 의 중요 한 도구 인 bash 를 능숙 하 게 사용 하여 프로 그래 밍 을 할 수 있 는 것 은 현재 운영 자동화 추세 에서 특히 중요 하 다.
다른 프로 그래 밍 언어 에 비해 bash 는 자신 만 의 함수 라 이브 러 리 가 없습니다. bash 는 기능 을 수행 할 때 PATH 경 로 를 통 해 외부 명령 을 호출 합 니 다. $PATH 경로 에 포 함 된 명령 은 bash 가 실행 할 수 있 는 기능 을 결정 합 니 다. $PATH 경 로 는 bash 의 함수 라 이브 러 리 입 니 다.즉, bash 스 크 립 트 의 프로 그래 밍 은 명령 의 쌓 기 와 같 아서 bash 프로 그래 밍 은 상대 적 으로 간결 하고 이해 하기 쉬 우 며 특히 시스템 관리 업 무 를 잘 처리 합 니 다.우 리 는 bash 의 기본 적 인 특성 만 익히 면 복잡 한 임 무 를 수행 할 수 있 는 효율 적 인 스 크 립 트 를 쓸 수 있 고 운영 과정 에서 많은 문제 들 이 적은 노력 으로 큰 효 과 를 거 둘 것 이다.본 고 는 주로 셸 프로 그래 밍 제어 문 구 를 소개 하고 관련 예 시 를 추가 하여 이해 와 기억 을 깊이 있 게 한다.관련 내용 은 아래 와 같 으 니 독자 스스로 참고 하 시기 바 랍 니 다.
1. if 구문
2. case 구문
3. for 순환 및 그 특수 한 용법
4. while 순환 및 그 특수 한 용법
5, until 순환
6. 순환 제어 문 contine
7. 순환 제어 문 break
8. 순환 제어 shift 명령
9. select 순환 과 메뉴
10. 신호 캡 처 trap
1. 조건 선택: if 문장
① 단일 분기
if 判断条件;then
条件为真的分支代码
fi
② 두 갈래
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
③ 여러 갈래
if 判断条件1; then
条件为真的分支代码
elif 判断条件2; then
条件为真的分支代码
elif 判断条件3; then
条件为真的分支代码
else
以上条件都为假的分支代码
fi
예: 사용자 입력 성적: 80 - 100 은 우수, 60 - 79 는 통과, 기타 탈락.
#!/bin/bash
read -p "pelease input your score: " score
if [ "$score" -ge 80 -a "$score" -le 100 ];then
echo "优秀"
elif [ "$score" -lt 80 -a "$score" -ge 60 ];then
echo "通过"
else
echo "淘汰"
fi
2. 조건 판단: case 문장
语法:case 变量引用 in
PAT1)
分支1;;
PAT2)
分支2;;
...
*)
默认分支;;
esac
case 는 glob 스타일 의 마스크 를 지원 합 니 다: *: 임의의 길이 임 의 문자 ?: 임의의 단일 문자 []: 지정 한 범위 내의 임의의 단일 문자 a | b: a 또는 b
...
예제: 스 크 립 트 를 작성 하여 yes 나 no 를 입력 할 때 대소 문 자 를 구분 하지 않 고 yes 또는 no 또는 다른 정 보 를 입력 하 는 지 판단 합 니 다.
#!/bin/bash
read -p "please input yes or no: " yn
ans=$(echo $yn|tr "[[:upper:]]" "[[:lower:]]")
case $ans in
y|yes)
echo yes;;
n|no)
echo no ;;
*)
echo yes/no?
esac
3. for 순환
문법: for 변수 이름 in 목록 ; do 순환 체 done
실행 메커니즘: 목록 에 있 는 요 소 를 '변수 이름' 에 순서대로 할당 합 니 다.매번 값 을 부여 한 후 순환 체 를 실행 합 니 다.목록 에 있 는 요소 가 다 소 진 될 때 까지 순환 이 끝 납 니 다.
목록 생 성 방법: (1) 목록 바로 보 여주 기 (2) 정수 목록: (a) {start..end} (b) $(seq [start [step]] end) (3) 목록 을 되 돌려 주 는 명령 $(COMMAND) (4) glob 사용, 예: *. sh (5) 변수 참조; $@, $*
예제: for 순환 으로 99 곱셈 표를 인쇄 합 니 다.
#!/bin/bash
for i in {1..9};do
for j in $(seq $i);do
echo -ne "$j*$i=$[$i*$j]\t"
done
echo
done
for 순환 의 특수 형식:
for (제어 변수 초기 화 ; 조건 부 판단 식 ; 변 수 를 제어 하 는 수정 식) do 순환 체 done
#!/bin/bash
for ((i=1;i<=9;i++)); do
for ((j=1;j<=i;j++)); do
echo -ne "$j*$i=$[$j*$i]\t"
done
echo
done
4. while 순환
문법: while CONDITION;do 순환 체 done
CONDITION: 순환 제어 조건;순환 에 들 어가 기 전에 먼저 판단 을 한다.매번 순환 한 후에 다시 판단 한다.조건 이 "true"이면 순환 을 실행 합 니 다.조건 부 테스트 상태 가 "false"로 끝 날 때 까지 순환 따라서: CONDTION 은 일반적으로 순환 제어 변수 가 있어 야 합 니 다.이 변수의 값 은 순환 체 에서 끊임없이 수 정 됩 니 다. 입장 조건: CONDITION 은 true 종료 조건: CONDITION 은 false
예: 100 이내 에 3 으로 나 눌 수 있 는 수의 합 을 구하 다.
#!/bin/bash
declare i=1
declare sum=0
while [ "$i" -lt 100 ];do
let i++
if [ $[i%3] -ne 0 ];then
continue
fi
let sum+=$i
done
echo sum is $sum
while 의 특수 한 용법 (파일 의 줄 마다 옮 겨 다 니 기):
while read line; do 순환 체 done 예제: ID 번호 가 짝수 인 모든 사용 자 를 찾 아 사용자 이름과 ID 번 호 를 표시 합 니 다.
while read line ;do
if [ $[`echo $line|cut -d: -f3`%2] -eq 0 ];then
echo -ne "username:`echo $line|cut -d: -f1` \t"
echo "uid:`echo $line|cut -d: -f3`"
fi
done
或者将内容通过管道传给while循环:
示例:若磁盘利用率大于80%,则通知用户。
#!/bin/bash
df|grep "/dev/sd"|while read disk ;do
diskused=$(echo $disk|sed -r 's/.* ([0-9]+)%.*/\1/')
diskname=$(echo $disk|cut -d" " -f1)
[ $diskused -ge 80 ] && echo "$diskname will bi full: $diskused%"
done
5. untill 순환
문법 until CONDITION;do 순환 체
done 입장 조건: CONDITION 은 false 종료 조건: CONDITION 은 true
예제: until 로 99 곱셈 표를 인쇄 합 니 다.#!/bin/bash
j=1
i=1
until [ "$j" -gt 9 ];do
until [ "$i" -gt "$j" ];do
echo -ne "$i*$j=$[i*j]\t"
let i++
done
echo
let i=1
let j++
done
6. 순환 제어 문 contine
contine 순환 체 에 사용 contine [N]: N 층 의 이번 순환 을 미리 끝내 고 다음 라운드 판단 에 들 어 갑 니 다.최 내층 은 제 1 층 이다 while CONDTIITON1; do CMD1 ... if CONDITION2; then continue fi CMDn ... done
예제: 5 를 제외 한 1 - 10 사이 의 숫자 를 인쇄 합 니 다.#!/bin/bash
for i in {1..10};do
if [ $i -eq 5 ];then
continue
else
echo $i
fi
done
7. 순환 제어 문 break
문법: break [N]:, 最内层为第1层
while CONDTIITON1; do
CMD1
...
if CONDITION2; then
break
fi
CMDn
...
done
break 와 contine 의 차 이 는 contine 은 순환 에서 조건 을 만족 시 키 는 단일 순환 을 뛰 어 넘 고 break 는 자신 이 있 는 순환 체 를 기본적으로 뛰 어 넘 는 것 이다.contine 예제 에서 break 로 바 뀌 면 1 - 4 만 인쇄 합 니 다. 5 트리거 break 가 순환 한 후에 인쇄 되 지 않 기 때 문 입 니 다.
8. 순환 제어 shift 명령
shift [n] n. 파 라 메 트릭 목록 list 를 왼쪽 으로 이동 하 는 데 사용 합 니 다. 파 라 메 트릭 목록 list 가 이동 하면 맨 왼쪽 에 있 는 매개 변 수 는 목록 에서 삭 제 됩 니 다.while 위치 파 라 메 트릭 목록 을 반복 할 때 shift 에 자주 사 용 됩 니 다. 예시#!/bin/bash
while (($#>0));do
echo $*
shift
done
显示结果:
[root@R1 app]# ./haha.sh a b c d e
a b c d e
b c d e
c d e
d e
e
9. select 순환 과 메뉴select variable in list
do
循环体命令
done
selection 순환 은 주로 메뉴 를 만 드 는 데 사 용 됩 니 다. 숫자 순 으로 배 열 된 메뉴 항목 은 표준 오류 에 표시 되 고 PS3 프롬프트 를 표시 하여 사용자 의 입력 을 기다 리 고 있 습 니 다. 사용 자 는 메뉴 목록 의 어떤 숫자 를 입력 하고 해당 하 는 명령 을 수행 합 니 다. 사용자 입력 이 내 장 된 변수 REPLY 에 저 장 됨 select 는 무한 순환 이 므 로 break 명령 으로 순환 을 종료 하거나 exit 명령 으로 스 크 립 트 를 종료 하 는 것 을 기억 해 야 합 니 다.ctrl + c 를 누 르 면 순환 을 종료 할 수 있 습 니 다. select 는 자주 케이스 와 공동으로 사용한다 for 순환 과 유사 하여 in list 를 생략 할 수 있 습 니 다. 이때 사용 위치 파 라 메 트릭 예제: #!/bin/bash
PS3="please choose your menu: "
select menu in huimian lamian hulatang yrt;do
case $REPLY in
1)
echo "the price is \$10" ;;
2)
echo "the price is \$15" ;;
3)
echo "the price is \$5" ;;
4)
echo "the price is \$20" ;;
*)
echo "get out!"
break
esac
done
10. 신호 캡 처 trap
trap '트리거 명령' 신호 사용자 정의 프로 세 스 가 시스템 에서 보 낸 지정 신 호 를 받 으 면 원본 작업 대신 트리거 명령 을 실행 합 니 다. trap 신호 신호 조작 무시 trap '-' 신호 원 신호 복구 작업 trap -p 사용자 정의 신호 조작 목록
예시:#!/bin/bash
trap 'echo “signal:SIGINT"' int
trap -p
for((i=0;i<=10;i++))
do
sleep 1
echo $i
done
trap '' int
trap -p
for((i=11;i<=20;i++))
do
sleep 1
echo $i
done
trap '-' int
trap -p
for((i=21;i<=30;i++))
do
sleep 1
echo $i
done
다음으로 전송:https://blog.51cto.com/arm2012/1959519
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.