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
'UNIX 시스템' 카테고리의 다른 글
조건식 / 프로그램 인자 - 13주차 - 1 (0) | 2023.06.02 |
---|---|
Loop - 12주차 수업 - 2 (실습 3-2 질문) (0) | 2023.06.01 |
Internet, Communication - 11주차 수업 - 2 (0) | 2023.05.31 |
File archive / Compress - 11주차 수업 - 1 (0) | 2023.05.30 |
find - 10주차 수업 - 2 (0) | 2023.05.30 |