셸 스크립트 프로그래밍 실습 2

Seong Woong Kim·2023년 3월 7일
0

Linux / Ubuntu

목록 보기
14/14

💡 이 문서는 한빛미디어 - 이것이 우분투/리눅스다를 기반으로 공부하면서 체화를 위해 정리하는 글입니다. 💡


4. 반복문


for~in 문

for~in문은 다음 형식과 같이 변수에 각각의 값을 넣은 후 do 안에 있는 ‘반복할 문장’을 실행한다.

  • 그러므로 값의 개수만큼 반복 실행하게 된다.
for 변수 in 값1 값2 값3 ...
do
  반복할 문장
done

2행 - hap=0

  • 합계를 누적할 변수를 0으로 초기화한다.

3행 - for i in 1 2 3 4 5 6 7 8 9 10

  • i 변수에 1 ~ 10까지 반복해 넣으면서 5행을 10회 실행한다.

  • 기존의 for문과 비슷하게 for((i=1;i<=10;i++))로 변경해서 사용할 수 있다. (변경할 때 괄호가 2개인 것에 주의한다.)

    • seq 명령을 사용할 수도 있다. 예를 들어 seq 1 10은 1에서 10까지 숫자를 돌려준다.

5행 - hap=expr $hap + $i

  • hap에 i 변수의 값을 누적한다. (결국 1부터 10까지 계속 더한다.)

2행 - for fname in $(ls *.sh)

  • fname 변수에 ls. *.sh 명령의 실행 결과를 하나씩 넣어서 4~5행을 반복

    • 즉, 파일 개수만큼 실행을 반복

4행 - echo " --------$fname---------"

  • 파일 이름을 출력한다.

5행 - head -3 $fname

  • 파일의 앞에 3줄을 출력한다.




while문

while문은 조건식이 참인 동안 계속 반복하는 특성을 갖는다.

2행 - while [ 1 ]

  • 조건식 위치에 [ 1 ] 또는 [ : ]이 오면 항상 참이다.

    • 그러므로 4행을 무한히 반복 실행한다.

    • ctrl + c 를 눌러 취소할 수 있음



1에서 10까지의 합계를 출력

2행 - hap=0

  • 누적할 hap 변수를 초기화한다.

3행 - i=1

  • 1에서 10까지 증가할 i 변수를 선언한다.

4행 - while [ $i -le 10 ]

  • i가 10보다 작거나 같으면 6~7행을 실행한다.

6행 - hap=expr $hap + $i

  • hap에 i의 값을 누적해 저장한다.

7행 - i=expr $i + 1

  • i 변수의 값을 1씩 증가시킨다.


비밀번호를 입력받고, 비밀번호가 맞을 때까지 계속 입력받는 스크립트

3행 - read mypass

  • mypass 변수에 값을 입력받는다

4행 - while [ $mypass != "1234" ]

  • mypass 변수의 값이 ‘1234’가 아니면 6~7행을 실행하고, 맞으면 while문을 종료한다.

7행 - read mypass

  • 다시 mypass 변수에 값을 입력받는다.




until문

while문과 용도가 거의 같지만, until문은 조건식이 참일 때까지 (거짓인 동안) 계속 반복한다.

#!/bin/sh
hap=0
i=1
until [ $i -gt 10]   # 10보다 커지면 참 / 거짓인 동안 실행
do
  hap=`expr $hap + $i`
  i = `expr $i + 1`
done
echo "1부터 10까지의 합"
exit 0




break, continue, exit, return

break는 주로 반복문을 종료할 때 사용

continue는 반복문의 조건식으로 돌아가게 함

exit는 해당 프로그램을 완전히 종료

return은 함수 안에서 사용할 수 있으며 함수를 호출한 곳으로 돌아가게 함

3행 - while [ 1] ; do

  • 무한 반복된다. while [ : ] 또는 while [ true ] 와 동일하다

5행 - case $input in

  • 4행에서 입력한 값에 따라 분기

6~7행 - b | B) break;;

  • b 또는 B가 입력되면 7행의 break가 실행되어 while문을 종료하고 16행이 실행됨

8~10행 - c | C) echo " continue를 누르면 while의 조건으로 돌아감" continue;;

  • c 또는 C가 입력되면 9~10행의 continue가 실행되어 3행 while의 조건식인 [ 1 ]로 돌아간다 (결국 무한 루프)

11~13행 - e | E) echo "exit를 누르면 프로그램(함수)를 완전히 종료함" exit 1;;

  • e 또는 E가 입력되면 12~13행의 exit가 실행되어 프로그램 자체를 종료한다.그러므로 16행이 출력되지 않는다.




5. 기타 알아둘 내용


사용자 정의 함수

사용자가 직접 함수를 작성하고 호출할 수 있다

함수이름 () {         # 함수를 정의
    내용들...
}
함수이름              # 함수를 호출

2~5행 - myFunction (_ ~ }

  • 함수를 정의한다.

  • 단, 이 부분은 7행에서 호출하기 전에는 실행되지 않는다.

  • 여기서 return 문은 함수를 호출한 곳으로 돌아가게 한다.

7행 - myFunction

  • 함수 이름을 사용하면 함수가 호출된다.




함수의 파라미터 사용

함수의 파라미터 (인자)를 사용하려면 함수를 호출할 때 뒤에 파라미터를 붙여서 호출

함수 안에서는 $1, $2, … 로 사용함

함수이름 ( ){                     # 함수를 정의
    $1, $2, .. 등을 사용
}
함수이름 파라미터1 파라미터2      # 함수를 호출

3행 - echo expr $1 + $2

  • 넘겨받은 파라미터 $1와 $2를 더한 값을 출력한다.

6행 - hap 10 20

  • 호출할 때 함수 이름에 넘겨줄 파라미터를 공백으로 분리해서 차례로 적어줌




eval

문자열을 명령문으로 인식하고 실행

3행 - echo $str

  • str 변수의 값인 ‘ls -l eval.sh’라는 글자를 그대로 출력

4행 - eval $str

  • str 변수의 값인 ‘ls -l eval.sh’를 명령으로 인식하고 실행




export

외부 변수로 선언

  • 선언한 변수를 다른 프로그램에서도 사용할 수 있게 함

2~3행 - echo $var1 , echo $var2

  • var1과 var2 변수를 출력

    • var2는 exp2.sh에서 외부 변수로 선언

2행 - var1="지역 변수"

  • var1에 값을 넣는다.

  • 일반 변수(지역 변수)이므로 현재 프로그램인 exp2.sh에서만 사용된다.

    • 즉, exp1.sh의 var1과는 우연히 이름만 같을 뿐 다른 변수다.

3행 - export var2="외부 변수"

  • var2를 외부 변수로 선언하고 값을 넣는다. 외부 프로그램(exp1.sh)에서도 사용 가능하다.

4행 - sh exp1.sh

  • exp1.sh를 실행한다.




printf

C 언어의 printf() 함수와 비슷하게 형식을 지정해서 출력할 수 있다.

3행 - var2="재미있는 리눅스~~"

  • 공백이 있으므로 ““로 묶어줘야 한다.

4행 - printf "%5.2f \n\n \t %s \n" $var1 "$var2"

  • %5.2f는 총 5자리며 소수점 아래 2자리까지 출력하라는 의미

  • \n은 1줄을 넘기는 개행 문자

  • \t는 Tab 문자

  • %s는 문자열을 출력

  • 주의할점은 $var2의 경우 값 중간에 공백이 있으므로 변수 이름을 ““로 묶어서 오류 방지




set과 $(명령)

리눅스 명령을 결과로 사용하려면 ‘$(명령)’ 형식을 사용해야 한다.

결과를 파라미터로 사용하고자 할 때는 set 명령과 함께 사용

2행 - echo "오늘 날짜는 $(date)입니다."

  • $(date)는 date 명령을 실행한 결과를 보여줌

3행 - set $(date)

  • $(date)의 결과가 $1, $2, $3, … 등의 파라미터 변수에 저장됨

4행 - echo "오늘은 $4 요일 입니다."

  • 4번째 파라미터인 요일이 출력됨




shift

파라미터 변수를 왼쪽으로 한 단계씩 아래로 시프트(이동) 시킨다.

3행 - str=""

  • 결과를 누적할 str 변수를 초기화한다.

4행 - while [ "$1" != "" ] ; do

  • $1 파라미터가 비어 있지 않은 동안에 반복 실행한다.

    • 처음 $1은 AAA고, 한 번 반복 실행하면 5,6행에 의해 $1이 BBB가 된다.

5행 - str="$str $1"

  • str 변수에 $1을 추가

6행 - shift

  • 전체 파라미터를 왼쪽으로 시프트시킨다.

    • $2 → $1 , $3 → $2 , $4 → $3, ..의 형태로 작업

8행 - echo $str

  • while문이 끝나면 누적한 str 변수를 출력





📚 REFRENCE 📚

  1. 이것이 우분투/리눅스다 - 한빛미디어
profile
성장과 연구하는 자세를 추구하는 AI 연구개발자

0개의 댓글