지난 쉘 스크립팅 시리즈 연재물들이 많은 독자분들께 좋은 반응을 얻었기에, 끝없는 학습의 여정을 이어가고자 이번 글을 준비했습니다.

- 리눅스 기본 쉘 스크립팅 언어 팁 이해하기 – 1부
- 리눅스 초보자를 위한 쉘 프로그래밍 학습용 스크립트 5선 – 2부
Bash 키워드(예약어)란?
키워드(keyword)는 컴퓨터 언어에서 특별한 의미를 지니는 단어나 기호를 말합니다. 아래의 기호와 단어들은 따옴표로 묶이지 않은 상태에서 명령어의 첫 번째 단어로 사용될 때 Bash에서 특수한 의미를 갖습니다.
! esac select }
case fi then [[
do for until ]]
done function while elif
if time else in {대부분의 프로그래밍 언어와 달리, Bash는 키워드를 변수명으로 사용하는 것을 허용합니다. 다만 이렇게 하면 스크립트의 가독성이 크게 떨어질 수 있습니다. 따라서 스크립트를 명확하게 유지하려면 키워드를 변수명으로 사용하지 않는 것이 좋습니다.
셸에서 명령어는 $(command) 형태로 실행됩니다. 정상적인 실행을 위해서는 명령어의 전체 경로를 포함해야 할 수도 있습니다. 예를 들어 $(/bin/date)처럼 말입니다.
'whereis' 명령어를 사용하면 특정 프로그램의 경로를 확인할 수 있습니다. 예: whereis date
[admin@wsxdn.com /]# whereis date date: /bin/date /usr/share/man/man1/date.1.gz
이론적인 내용은 여기까지 충분합니다. 이제 실제 스크립트로 넘어가 보겠습니다.
현재 작업 디렉토리 한 번에 이동하기
스크립트 실행 시 숫자 값을 인자로 전달하여, 현재 작업 디렉토리에서 원하는 만큼 상위 레벨로 한 번에 이동할 수 있는 스크립트입니다.
#! /bin/bash LEVEL=$1 for ((i = 1; i <= LEVEL; i++)) do CDIR=../$CDIR done cd $CDIR echo "You are in: "$PWD exec /bin/bash
위 코드를 데스크톱에 "up.sh"라는 이름으로 저장하고, 실행 권한을 부여합니다(chmod 755 up.sh). 그다음 아래와 같이 실행합니다:
./up.sh 2 (현재 작업 디렉토리를 두 단계 위로 이동)
./up.sh 4 (현재 작업 디렉토리를 네 단계 위로 이동)
활용 분야
폴더 안에 폴더가 중첩되어 있고 그곳에 라이브러리, 바이너리, 아이콘, 실행 파일 등이 서로 다른 위치에 산재해 있는 대규모 프로젝트에서, 개발자는 이 스크립트를 활용해 원하는 위치로 매우 자동화된 방식으로 이동할 수 있습니다.
참고: 위 스크립트에서 'for'는 반복문이며, 조건이 참인 동안 계속 실행됩니다.
실행 결과 예시
[admin@wsxdn.com /]# chmod 755 up [admin@wsxdn.com /]# ./up.sh 2 You are in: / [admin@wsxdn.com /]# ./up.sh 4 You are in: / [admin@wsxdn.com /]#
up.sh 다운로드
중복 없는 무작위 파일 또는 폴더 생성하기
파일명이 절대 중복될 가능성이 없는 무작위 파일(폴더)을 생성하는 스크립트입니다.
#! /bin/bash echo "Hello $USER"; echo "$(uptime)" >> "$(date)".txt echo "Your File is being saved to $(pwd)"
간단해 보이지만 작동 원리는 결코 단순하지 않습니다. 핵심 요소를 하나씩 살펴보겠습니다.
- 'echo': 따옴표 안에 작성된 모든 내용을 출력합니다.
- '$': 셸 변수를 나타냅니다.
- '>>': 출력을 리디렉션합니다. 여기서는 date 명령어의 결과값에 .txt 확장자를 붙인 파일명으로 저장됩니다.
date 명령어의 출력 결과에는 연도와 함께 시, 분, 초까지 포함되어 있다는 점을 활용한 것입니다. 덕분에 파일명이 중복될 걱정 없이 체계적으로 정리된 파일명을 얻을 수 있습니다. 나중에 참조하기 위해 타임스탬프가 포함된 파일을 생성해야 하는 경우에 매우 유용합니다.
실행 결과 예시
[admin@wsxdn.com /]# ./randomfile.sh Hello server Your File is being saved to /home/server/Desktop
데스크톱에 오늘 날짜와 현재 시간이 담긴 파일이 생성된 것을 확인할 수 있습니다.
[admin@wsxdn.com /]# nano Sat\ Jul\ 20\ 13\:51\:52\ IST\ 2013.txt 13:51:52 up 3:54, 1 user, load average: 0.09, 0.12, 0.08
아래는 같은 원리를 응용한 더욱 발전된 형태의 스크립트로, 리눅스 서버의 네트워크 정보를 수집하는 데 매우 유용합니다.
randomfile.sh 다운로드
네트워크 정보 수집 스크립트
리눅스 서버의 네트워크 정보를 수집하는 스크립트입니다. 코드가 상당히 길어 전체 소스와 출력 결과를 여기에 게시하기 어려우므로, 아래 다운로드 링크를 통해 직접 받아서 테스트해 보시기 바랍니다.
참고: lsb-core 패키지 및 기타 필요한 패키지와 의존성을 설치해야 할 수 있습니다. Apt나 Yum으로 필요한 패키지를 설치하세요. 또한 대부분의 명령어가 root 권한으로 실행되도록 구성되어 있으므로, 당연히 root 권한으로 스크립트를 실행해야 합니다.
실행 결과 예시
[admin@wsxdn.com /]# ./collectnetworkinfo.sh The Network Configuration Info Written To network.20-07-13.info.txt. Please email this file to admin@wsxdn.com_provider.com. ktop
스크립트 내의 이메일 주소를 본인의 주소로 변경하면 결과 파일을 자신에게 메일로 받아볼 수 있습니다. 자동 생성된 파일은 언제든 열어볼 수 있습니다.
collectnetworkinfo.sh 다운로드
대문자를 소문자로 변환하는 스크립트
파일의 대문자를 소문자로 변환한 후, 그 결과를 "small.txt"라는 텍스트 파일로 저장하는 스크립트입니다. 파일명은 필요에 따라 수정할 수 있습니다.
#!/bin/bash echo -n "Enter File Name : " read fileName if [ ! -f $fileName ]; then echo "Filename $fileName does not exists" exit 1 fi tr '[A-Z]' '[a-z]' < $fileName >> small.txt
이 스크립트는 클릭 한 번으로 어떤 길이의 파일이든 대문자를 소문자로 변환할 수 있으며, 약간만 수정하면 그 반대 방향(소문자 → 대문자)으로도 변환이 가능합니다.
실행 결과 예시
[admin@wsxdn.com /]# ./convertlowercase.sh Enter File Name : a.txt Initial File: A B C D E F G H I J K ...
새로 생성된 파일(small.txt)의 내용:
a b c d e f g h i j k ...
convertlowercase.sh 다운로드
간단한 계산기 프로그램
#! /bin/bash
clear
sum=0
i="y"
echo " Enter one no."
read n1
echo "Enter second no."
read n2
while [ $i = "y" ]
do
echo "1.Addition"
echo "2.Subtraction"
echo "3.Multiplication"
echo "4.Division"
echo "Enter your choice"
read ch
case $ch in
1)sum=`expr $n1 + $n2`
echo "Sum ="$sum;;
2)sum=`expr $n1 - $n2`
echo "Sub = "$sum;;
3)sum=`expr $n1 \* $n2`
echo "Mul = "$sum;;
4)sum=`expr $n1 / $n2`
echo "Div = "$sum;;
*)echo "Invalid choice";;
esac
echo "Do u want to continue (y/n)) ?"
read i
if [ $i != "y" ]
then
exit
fi
done실행 결과 예시
[admin@wsxdn.com /]# ./simplecalc.sh Enter one no. 12 Enter second no. 14 1.Addition 2.Subtraction 3.Multiplication 4.Division Enter your choice 1 Sum =26 Do u want to continue (y/n)) ? y 1.Addition 2.Subtraction 3.Multiplication 4.Division Enter your choice 3 mul = 14812 Do u want to continue (y/n)) ? n
simplecalc.sh 다운로드
이렇게 간단한 방법만으로도 사칙연산 같은 강력한 프로그램을 얼마나 쉽게 만들 수 있는지 확인하셨나요? 하지만 여기서 끝이 아닙니다. 다음 연재에서는 시스템 관리자 관점에서 바라본 더 폭넓은 내용을 다룰 예정이니 기대해 주세요.
오늘은 여기까지입니다. 독자이자 최고의 비평가인 여러분께서 이번 글에서 무엇이 가장 도움이 되었는지, 그리고 앞으로 어떤 주제를 다뤄주길 원하시는지 꼭 알려주세요. 궁금한 점은 언제든지 댓글로 남겨주시면 성심껏 답변드리겠습니다. 그때까지 늘 건강하게, 안전하게 지내시고 저희 콘텐츠에 좋아요와 공유로 많은 성원 부탁드립니다!