검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : CentOS system administration using text-based user interfaces

  Curses 라이브러리를 사용하는 dialog를 통해 스크립트에서 나름 GUI 느낌이 나게 스크립트를 짜는 예제입니다. CentOS라면 보통은 dialog가 설치되어 있지 않으므로 yum을 사용해서 설치해야 합니다.

  아래 예제에서는 메뉴, 진행률 막대의 기본 사용법을 볼 수 있습니다.
#!/bin/bash

#The dialog part. By default, the chosen menu item goes to STDERR (2). From there it's redirected to a temp file (/tmp/temp_file) in the script.

/usr/bin/dialog --title "Delete /tmp content" --menu "Delete /tmp content older than:" 10 30 0 1 "1 day" 2 "2 days" 2> /tmp/temp_file

#Get the choice by reading the /tmp/temp_file
option=`cat /tmp/temp_file`

#Remove the temp file
rm -f /tmp/temp_file

#Clear the screen for better readibility
/usr/bin/clear

#Create a function to delete the temp content. It accepts as an argument a number of days. Any content older than this number will be deleted.
function delete_tmp {
    /bin/echo "Deleting files and directories older than $1 day(s) in /tmp"
    /bin/find /tmp/ -type f -mtime +$1 -exec rm {} -rf \;
    #Show a dialog gauge with the progress
    /bin/echo "50" | /usr/bin/dialog --gauge "Deleting files" 10 30 0
    #For better visual effect wait 1 second before continuing
    /bin/sleep 1
    /bin/find /tmp/ -type d -mtime +$1 -exec rm {} -rf \;
    #Show a dialog gauge with the progress again
    /bin/echo "100" | /usr/bin/dialog --gauge "Deleting directories" 10 30 50
    /bin/sleep 1
    #Clear the screen
    /usr/bin/clear
}

#Go through a conditional statement
#First check if $option is not null. Option is null usually when the cancel button from the menu is pressed.
if [ -z $option ]; then
    /bin/echo 'Cancel pressed. Exiting.'
#Check if the first option is chosen
elif [ $option -eq 1 ]; then
    delete_tmp 1
#Check the second option
elif [ $option -eq 2 ]; then
    delete_tmp 2
fi
  실행하면 두 가지 선택사항이 나오는데 첫 번째는 /tmp 디렉토리 내에 있는 파일들 중 최종 수정 시간이 하루 이상 지난 파일들을 삭제하는 것이고, 두 번째는 이틀 이상 지난 파일을 삭제하는 것입니다. 선택하면 진행률 막대도 나오는 것을 볼 수 있습니다. 메뉴와 게이지의 인자로 있는 10과 30은 각각 텍스트 박스의 높이와 너비를 텍스트 문자로 쟨 값입니다. 메뉴에 있는 세 번째 인자는 내부 선택 공간의 높이고 네 번째 인자는 처음에 선택되어 있는 항목의 번호입니다. 게이지의 세 번째 인자는 진행률 막대의 시작지점을 비율 값으로 나타낸 것입니다.

  배포판에 따라 명령어의 경로명이 다를 수 있습니다. 가령 데비안 계열의 경우 find의 기본 위치가 /usr/bin/find 입니다. 이런 문제 때문에 스크립트 윗 부분에서 OS 및 배포판을 감지하여 그에 맞는 경로명을 변수에 보관하거나 which 같은 명령어로 즉석에서 알아내서 변수로 보관한 뒤 명령어를 사용할 때 그 변수를 활용하는 것이 더 좋습니다.

2013/07/16 13:18 2013/07/16 13:18