반응형
02-04-03 셸 스크립트의 조건문
if 문
- if문의 표현식이 참이면 then 구문의 명령문이 실행이 됩니다. 그렇지 않으면 fi 구문 이후의 명령문이 실행됩니다. if 구문의 표현식은 '['과 ']' 사이에 공백을 둬야 합니다.
- if-else문의 표현식이 참이면 then 구문의 명령문을 실행하고 그렇지 않으면 else 구문의 명령문을 실행합니다.
- if-elif-elif-fi문은 if 구문의 표현식이 참이면 then 이하의 명령문을 실행하고 그렇지 않으면 elif 구문 이하의 표현식이 참인지 확인한다. 참이면 then 구문 이하의 명령문을 실행하고 그렇지 않으면 else 구문 이하의 명령문을 실행한다.
- if-then-else-if-then-fi-fi문(중첩 if문)은 if의 표현식이 참이면 then 이하의 명령문을 실행하고 그렇지 않으면 else 이하의 구문을 실행한다. 그리고 그 명령문은 동일한 if 구문을 중첩하여 실행할 수 있다.
- if 구문에서 첫 번째 인자가 "cool"이라면 then 이하의 구문 "Cool wind"를 화면에 출력한다. 그렇지 않다면 첫 번째 인자가 "warm"과 같은지 확인하고 가다면 then 이하의 구문 "warm wind"를 출력한다. 그렇지 않으면 "Not warm wind"를 출력한다.
-
#!bin/bash
if [ "$1" = "cool" ]
then
echo "cool wind"
elif [ "$1" = "warm" ]
then
echo "warm wind"
else
echo "Not warm wind"
fi
case 문
- case문은 $ 변수와 상응하는 패턴의 명령문을 실행한다.
- $NOW가 "Mon'이라면 "Full backup"을 출력하고, Tue, Wed, Thu, Fri 중에 하나라면 "Partial backup을 출력한다. Sat, Sun이라면 "No Backup"을 출력한다. 그 외라면 "Error"를 출력한다.
-
#!/bin/bash
NOW=$(date + "%a")
case $NOW in
Mon)
echo "Full backup";;
Tue|Wed|Thu|Fri)
echo "Partial backup";;
Sat|Sun)
echo "No backup";;
*)
echo "Error";;
esac
셸 스크립트의 반복문
for 문
- 변수에 값 1을 할당하고 명령문을 실행하고, 변수에 값 2를 할당하고 명령문을 실행한다. in 구문 이하의 값을 모두 순차적으로 할당할 때마다 명령문을 실행한다.
-
for $변수 in 값1, 값2
do
명령문
done - 변수 i에 1을 할당하고 "Loop ... number $i"를 출력하고 변수 1에 2를 할당하고 "Loop ... number $i"를 출력한다. 순차적으로 i에 3, 4, 5를 할당하고 마찬가지로 echo 문을 실행한다.
-
#!/bin/sh
for i in 1 2 3 4 5
do
echo "Looping ... number $i"
done
while 문
- 표현식이 참일 동안 do와 done 사이의 명령문을 실행한다. 표현식이 거짓일 경우 반복문을 종료한다.
-
while 표현식
do
명령문
done - INPUT_STRING 변수에 bye가 입력될 때까지 "You typed : $INPUT_STRING"을 출력한다. bye가 입력되면 반복문을 종료한다.
-
#!/bin/sh
INPUT_STRING=hello
while [ ""$INPUT_STRING" != "bye" ]
do
echo "Please type something in (bye to quit)"
read INPUT_STRING
echo "You typed: $INPUT_STRING"
done
until 문
- 표현식이 만족할 때까지 명령문을 실행한다.
-
until 표현식
do
명령문
done - 변수 i가 6보다 클 때까지 "Welcome $i times."를 출력한다.
-
#!/bin/bash
i=1
until [ $i -gt 6 ]
do
echo "Welcome $i times."
i=$(( i+1 ))
done - 다음은 위의 셸 스크립트 실행 결과이다.
-
Welcome 1 times.
Welcome 2 times.
Welcome 3 times.
Welcome 4 times.
Welcome 5 times.
Welcome 6 times.
select 문
- 메뉴 중 숫자로 항목을 선택하고 그에 대응하는 명령어를 수행하기 위한 반복문이다.
-
select $변수 in 메뉴1 메뉴2 메뉴3 ...
do
수행할 명령어
done - who 또는 whoami 메뉴 항목을 숫자로 선택하면 해당 명령어를 실행하고 quit 메뉴 항목의 숫자를 선택하면 셸을 종료한다.
-
#!/bin/bash
select menu in who whoami quit
do
case $menu in
who) who;;
whoami) whoami;;
quit) break;;
*) echo "whong menu item";;
esac
done
셸 스크립트의 함수
함수 구문 문법
- 함수의 정의는 function 지시어를 통해 함수 이름을 선언하고 함수가 수행할 명령문을 기술한다.
-
function 함수 이름
{
명령문
} - 함수의 호출은 함수 이름을 명시하여 호출한다.
-
#!/bin/bash
함수 이름 - "Oh! Aactually, it works"를 출력하는 myfunction을 정의하였고 호출할 때는 함수 이름을 그대로 사용하였다.
-
myfunction()
{
echo "Oh! Actually, it works"
}
myfunction
셸 스크립트의 부분 문자열 제거
스트링과 패턴을 비교하여 배정된 문자열을 소거하는 4가지 방법
- 스트링과 패턴을 비교하여 매칭 된 문자열을 소거하는 4가지 방법이 있다.
- ${string#pattern}: 맨 앞부터 패턴과 가장 짧게 매치된 문자열을 지운다.
- ${strring##pattern}: 맨 앞부터 패턴과 가장 길게 매치된 문자열을 지운다.
- ${string%pattern}: 맨 뒤부터 패턴과 가장 짧게 매치된 문자열을 지운다.
- ${string%%pattern}: 맨 뒤부터 패턴과 가장 길게 매치된 문자열을 지운다.
문자열의 앞부터 A로 시작해서 1로 종료하는 패턴 중 가장 짧은 매칭을 삭제하거나 가장 긴 매칭을 삭제한다.
-
STR=ABC123abc123ABC
# | - - | 가장 짧은 문자열 (#)ABC123abc123ABC
# | -------- | 가장 긴 문자열 (##)ABC123abc123ABC
echo ${STR#A*1} # 23abc123ABC
echo ${STR##A*1} # 23ABC
문자열의 뒤부터 3으로 시작해서 C로 종료하는 패턴 중 가장 짧은 매칭을 삭제하거나 가장 긴 매칭을 삭제한다.
-
STR=ABC123abc123ABC
# | - - | 가장 짧은 문자열 (%) ABC123abc123ABC
# | -------- | 가장 긴 문자열 (%%) ABC123abc123ABC
echo ${STR%3*C} # ABC123abc12
echo ${STR%%3*C} # ABC12
반응형
'Linux > 리눅스 실무의 이해' 카테고리의 다른 글
03-01-02 네트워크 기초_네트워크 장비 (0) | 2022.01.23 |
---|---|
03-01-01 네트워크의 기초 (0) | 2022.01.22 |
02-04-02 셸 프로그래밍 (0) | 2022.01.20 |
02-04-01 셸(Shell) (0) | 2022.01.17 |
02-03 X 윈도우 (0) | 2022.01.15 |