4. 반복메뉴방식의 쉘프로그램 만들기
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 2,957 조회
- 0 추천
-
목록
본문
4. 반복메뉴방식의 쉘프로그램 만들기
리눅스 쉘프로그램 내에서 사용되는 select문은 메뉴방식의 반복문으로 동작하는 쉘프로그램을 만들고자 한다면 최상, 최적의 방법이 될 것입니다. 현재까지 반복되는 메뉴방식의 쉘프로그램을 작성할 때에는 대부분 while문과 case문, 그리고 if문등을 적절하게 사용하였습니다. 하지만 이번에 설명드리는 select문을 보신다면 아마도 그 유용성과 편리성에 푹 빠지지 않을까 생각합니다. 우선, select문은 반복되는 메뉴방식의 쉘프로그램을 만들 때에 최적이라는 것을 기억하시고 사용하는 방법과 작동방식에 대해서 알아보겠습니다. select문의 사용형식은 다음과 같습니다.
select 변수 in 메뉴리스트 do 실행될 명령문들 done |
select문으로 반복메뉴방식의 쉘프로그램을 작성할 때에는 PS3라는 쉘변수를 사용하는 것이 일반적입니다. 즉, PS3쉘변수를 사용하면 PS3에 지정된 메시지를 화면으로 출력하고 사용자의 입력을 기다립니다. select문이 실행되면 in다음의 메뉴리스트에 번호를 붙여서 화면으로 출력합니다. 그리고 선택된 번호가 지정되면 변수에 메뉴리스트에서 선택된 해당리스트를 저장한 다음 “do ~ done”의 내용이 실행됩니다. 그리고 “do ~ done”내에 각 메뉴의 실행에 맞는 명령문들을 작성해 둡니다. 그리고 “do ~ done”내에 특별한 종료명령어가 들어있지 않다면 select문은 “CTRL+C”를 만날 때 까지 계속 반복될 것입니다.
아래의 예는 select문을 이용하여 간단하게 작성한 쉘프로그램입니다.
[root@command root]# cat select01.sh #!/bin/bash
pg1="w" pg2="id" pg3="who" pg4="date" pg5="ls"
PS3="Select NUMBER to run program :"
select systemcheck in $pg1 $pg2 $pg3 $pg4 $pg5 do echo "#############$systemcheck COMMAND running....#############" $systemcheck echo "" echo "" echo "" echo "" echo "ENTER to list MENU" done [root@command root]# |
위의 쉘프로그램은 실행할 명령어리스트를 메뉴방식으로 화면에 표시한 다음 사용자의 선택을 기다립니다. 사용자가 선택한 프로그램을 실행하고 다시 대기하는 방식으로 작동합니다.
pg1="w"
pg2="id"
pg3="who"
pg4="date"
pg5="ls"
위에서 pg1, pg2, pg3, pg4, pg5에는 실행할 명령어들을 하나씩 지정해 둔 것입니다.
PS3="Select NUMBER to run program :"
그리고 PS3는 쉘변수로서 메뉴리스트가 화면에 출력한 다음에 입력대기 메시지로 출력할 문자열을 지정한 것입니다.
select systemcheck in $pg1 $pg2 $pg3 $pg4 $pg5
$pg1,$pg2, $pg3, $pg4, $pg5의 명령어리스트를 번호를 붙여서 선택할 메뉴방식으로 화면에 출력합니다.
do
echo "#############$systemcheck COMMAND running....#############"
$systemcheck
echo ""
echo ""
echo ""
echo ""
echo "ENTER to list MENU"
done
select문에 의해 화면에 출력된 메뉴리스트를 확인한 후에 사용자가 선택한 왼쪽번호에 해당하는 번호오른쪽의 값을 “변수”에 할당하여“do ~ done”사이의 명령문들을 실행합니다.
다음은 이 쉘스크립트를 실행한 예입니다.
[root@command root]# ./select01.sh 1) w 2) id 3) who 4) date 5) ls Select NUMBER to run program :1 #############w COMMAND running....############# 02:03:22 up 10:12, 3 users, load average: 1.89, 2.00, 1.99 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.0.12 12:56am11:56 1:48 0.09s -bash command pts/1 192.168.0.12 6:44pm 0.00s 0.77s 0.02s /usr/sbin/s root pts/2 192.168.0.12 12:10am 1:06m 0.33s 0.33s -bash
ENTER to list MENU Select NUMBER to run program : ENTER 1) w 2) id 3) who 4) date 5) ls Select NUMBER to run program :2 #############id COMMAND running....############# uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
ENTER to list MENU Select NUMBER to run program : ENTER 1) w 2) id 3) who 4) date 5) ls Select NUMBER to run program :3 #############who COMMAND running....############# root pts/0 Feb 23 00:56 (192.168.0.12) command pts/1 Feb 22 18:44 (192.168.0.12) root pts/2 Feb 23 00:10 (192.168.0.12)
ENTER to list MENU Select NUMBER to run program : ENTER 1) w 2) id 3) who 4) date 5) ls Select NUMBER to run program :4 #############date COMMAND running....############# Mon Feb 23 02:03:32 KST 2004
ENTER to list MENU Select NUMBER to run program : ENTER 1) w 2) id 3) who 4) date 5) ls Select NUMBER to run program :5 #############ls COMMAND running....############# Desktop mutt-1.4-10.i386.rpm domain.tar.gz mydoomscan-1.0.tgz e100-2.3.27 ncftplogin.cfg e100-2.3.27.tar.gz quota-3.06-9.i386.rpm fetchmail-6.2.0-3.i386.rpm read01.sh kernelcompile011.jpg sendmail-8.12.8-4.i386.rpm kernelcompile012.jpg test kernelcompile013.jpg tools kernelcompile014.jpg until01.sh let01.sh vitest linux-2.6.0.tar.gz while01.sh linux-2.6.1.tar.bz2 while02.sh linux-2.6.2-rc1.tar.bz2 woojoo linux-2.6.2-rc1.tar.gz zlib.tar.gz
ENTER to list MENU Select NUMBER to run program : ENTER 1) w 2) id 3) who 4) date 5) ls Select NUMBER to run program : ^C [root@command root]# |
1부터 차례대로 실행하여 보았습니다. 그 결과 각 메뉴번호에 해당하는 명령어들이 실행되었음을 알 수 있습니다. 맨 마지막의 예처럼 이 쉘프로그램을 종료할 때에는 “CTRL+C”를 누르시면 됩니다.
간단히 작성한 쉘프로그램이지만 아마도 필자가 예로 든 이 select쉘프로그램에서 많은 힌트를 얻을 수 있을 것입니다. 즉, 여러분들이 자주 사용하는 명령어를 이와 같이 메뉴방식으로 사용할 수도 있으며 시스템 점검명령어 리스트를 메뉴로 작성하여 사용할 수도 있을 것입니다.
관련자료
-
이전
-
다음