본문 바로가기
UNIX 시스템

Basic Shell Programming - 12주차 - 1

by 세인트킴 2023. 6. 1.

Shell Script 작성

BASH - Bourne Again Shell을 중심으로 작성

간단한 예

#very Simple Shell Script Example
echo Hello. # output to display

#은 설명문(comment)을 시작하는데 사용. #이후부터 줄 끝까지는 설명문으로 취급된다.

#!으로 시작하기

#!/bin/bash
echo Hello.

#!다음에는 이 script를 해석할 명령어 해석기(command interpreter)를 지정한다.

// 첫 줄에서 사용해야 한다. 만일 #!이 첫 줄이 없으면 기본 shell이 해석기로 사용된다. 

Bourne Shell Script C Shell Script Korn Shell Script
#!bin/sh
echo Hello.
#!/bin/csh
echo Hello.
#!bin/bash
echo Hello.

#! 설명

파일 내용에 따라 shell 이외의 다른 해석기도 지정할 수 있다.

  • shell 프로그램인 경우: sh, csh, bash, ksh 등
  • perl 프로그램인 경우: perl
  • awk 프로그램인 경우: awk

해석기는 파일의 첫 줄 내용부터 해석하여 실행에 들어간다. 

첫 줄은 #!인데, 이것은 #으로 시작하므로 해석기는 이 첫줄을 결국 설명문으로 취급한다.

반드시 해석기가 있는 정확한 경로를 적어야 하지만 해석기의 위치는 시스템에 따라 다를 수 있다.

perl 프로그램 awk 프로그램
#!/bin/perl
...
#!/bin/awk
...

#!은 2byte로 된 magic number

file 명령은 magic number를 보고 파일의 종류를 판별한다. 

-user/local/share/magic에는 각종 magic number이 정의되어 있다.

변수

#!/bin/bash
STR="Hello World!"
echo $STR

조건문 if

if [ expression ]
then
	statement
fi

예시

if ... then

#!/bin/bash
if [ "hello" = "hello" ]; then
	echo TRUE
fi

if ... then ... else(elif)

#!/bin/bash
if [ "hello" = "world" ]; then
	echo TRUE
else
	echo FALSE
fi

Variable 포함

#!/bin/bash
T1="hello"
T2="world"
if [ $T1 = $T2 ]; then
	echo TRUE
else
	echo FALSE
fi

루프 for

for variable in words:
do
	staments
done

예시

ex1

#!/bin/bash
for fruits in apple banana pear orange strawberry;
do
	echo $fruits
done

ex2

#!/bin/bash
for i in `seq 1 10`;
do
	echo $i
done

ex3

#!/bin/bash
for i in $(ls);
do
	echo $i
done

ex4

#!/bin/bash
for i in *;
do
	echo $i
done

 


 

실습1(variable)

더보기

1. 현재 로그인되어있는 사용자 수를 변수 NUM에 저장 후 다음과 같이 출력하는 쉘 프로그램 numlogin을 작성하시오.

현재 접속되어 있는 사용자 수는 3명 입니다.

#!/bin/bash
NUM=$(who | wc -l)
echo "현재 접속되어 있는 사용자 수는 $NUM 명 입니다.

2. 본인의 생일을 변수 MY_DOB에 저장 후 다음과 같이 출력하는 쉘 프로그램 mybirthday를 작성하시오

2004-05-17

#!/bin/bash
MY_DOB="1999-07-21"
echo $MY_DOB
//MY_DOB=$(1999-07-21)은 실행이 안된다. 왜냐하면 $()는 명령어 치환 구문으로, 명령어를 실행하고 결과를 변수에 할당한다.
변수에 값을 할당하기 위해서는 $()를 사용하지 않아야 한다.

실습2(if)

더보기

1. date 명령을 이용해서 오늘 날짜를 2023-05-22형태로 출력한다.

date +%Y-%m-%d

2023-05-31

 

2. 오늘 날짜가 본인의 생일인지 여부에 따라 아래와 같이 출력하는 쉘 프로그램 check_birthday를 완성해본다.

#!/bin/bash
TODAY=$(date +%Y-%m-%d)
MY_BIRTH="1999-07-21"
if [ $TODAY = $MY_BIRTH ]; then
	echo "Today is $TODAY. Happy Birthday!"
else
	echo "Today is $TODAY. Not my Birthday.."
fi

실습3(if)

더보기

1. 오늘이 토요일 또는 일요일인지 여부에 따라 다음과 같이 출력하는 쉘 프로그램 today를 완성하시오(date 명령의 요일 출력 도움말 참조)

#!/bin/bash
TODAY=$(date +%A)
if [ $TODAY = "토요일" ]; then
	echo "오늘은 $TODAY. 행복한 주말입니다."
else
	if [ $TODAY = "일요일" ]; then
    	echo "$TODAY. 행복한 주말입니다."
    else
    	echo "오늘은 $TODAY. 아쉽지만 주말이 아니군요!"
    fi
fi

실습4(for)

더보기

1. who, tr, cut 명령을 이용하여 로그인되어 있는 사용자의 id 부분만 출력한다.

202021351

201921302

201921021

who | tr -s ' ' | cut -f1 -d ' '

 

2. for 구문을 이용하여 다음과 같이 로그인 사용자 목록을 출력하는 쉘 프로그램 welcome을 작성하라.

202021351 님 입장하셨습니다!

201921302 님 입장하셨습니다!

201921021 님 입장하셨습니다!

...

#!/bin/bash
for ID in $(who | tr -s ' ' | cut -f1 -d ' ')
do
	echo "$ID님 입장하셨습니다!"
done