Chapter 05. 셸 (shell ) 관리 Solaris 3. 셸 스크립트 작성

Slides:



Advertisements
Similar presentations
Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Advertisements

파이썬 (Python). 1 일 : 파이썬 프로그래밍 기초 2 일 : 객체, 문자열 3 일 : 문자인코딩, 정규표현식, 옛한글 4 일 : 파일 입출력 5 일 : 함수와 모듈 6 일 : 원시 말뭉치 다루기 실습 7 일 : 주석 말뭉치 다루기 실습 8 일 : 웹 데이터로.
Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
변수와 조건문 빛나리 36 호 박승운. 파이썬 쉽게 사용하기 Python IDLE 사용 FILE - New File 로 파일 만들기 Run – Run Module 로 실행하기.
1/29 키보드로 직접 입력할 수 없는 다양한 기호와 한자를 입력하는 방법을 알아 보자. 또한 블록으로 영역을 설정하는 여러 가지 방법에 대해 살펴본 후 블록 으로 설정된 내용을 복사하여 붙여넣거나, 잘라내고 이동하는 방법에 대해서 도 알아보자. 02_ 문서의 입력과 편집.
1/37 한글에는 전문적인 문서 편집을 위한 고급 기능이 있다. 문서를 편리하게 수 정할 수 있도록 도와주는 찾기 / 찾아 바꾸기, 다른 위치로 이동할 수 있는 책 갈피와 하이퍼링크에 대해 알아보자. 그리고 자주 사용하는 서식을 미리 정 해 놓고 쓰는 스타일 활용법과 스타일이.
재료수치해석 HW # 박재혁.
Chapter 10장 솔라리스 자원 관리 및 프로젝트 관리 Solaris2. 프로젝트 관리
Cary UV 분석 매뉴얼 1. 바탕화면의 Cary WinUV 클릭 정량분석 다 파장 동시분석 단 파장 분석
DB 프로그래밍 학기.
DB 프로그래밍 학기.
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
㈜디아이씨 SSLVPN 협력사 접속방법 2017년 4월.
Chapter 7. 조건문.
Chapter 16 백업 및 복구 Solaris 2 . ufsdump 와 ufsrestore
Chapter09 JavaScript 구구단표 만들기
Linux/UNIX Programming
 13장. 배시쉘 프로그래밍.
Chapter 19 솔라리스 네트워크 관리 Solaris2 . 네트워크 관리 명령어
임베디드 시스템 개론 크로스 플랫폼 설치 2일차 강의 자료 Embedded System Lab.
제2장 기본 문법 (2) 주제 : 연산자, 조건문, 반복문 수원과학대학 컴퓨터정보과.
양방향 파이프의 활용 양방향 통신 파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다.
7장. 셸 스크립트 프로그래밍.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
Communication and Information Systems Lab. 황재철
Javascript Basic Sample Programs
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
DK-128 개발환경 설정 아이티즌 기술연구소 김태성 연구원
Cross Compiler를이용한 커널 컴파일 및 포팅
MATLAB
어서와 C언어는 처음이지 제14장.
솔라리스10 3장. 솔라리스 패키지 관리.
연산자 (Operator).
프로그래밍 원리 Chapter 05 자바스크립트 기초 신한대학교 IT융합공학부 박 호 균.
에어 조건문.
웹디자인
1차시: 낮과 밤이 생기는 원리 지구과학
Choi Seong Yun 컴퓨터 프로그래밍 기초 #06 : 반복문 Choi Seong Yun
자바 5.0 프로그래밍.
PL/SQL 코드 생성 및 수행 1 여러가지 환경 DOS에서 sqlplus Windows에서의 sqlplusw
김선균 컴퓨터 프로그래밍 기초 - 7th : 함수 - 김선균
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
U N I X 창원대학교 전자계산학과 김병찬.
17장. 제어문과 내장 함수 제어문 내장 함수 제어문 내장 함수.
1. 스크립트 작성 마법사 2. NSIS 스크립트 컴파일
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
Fucntion 요약.
( Windows Service Application Debugging )
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
뇌를 자극하는 Solaris bible.
DK-128 개발환경 설정 아이티즌 기술연구소 김태성 연구원
DK-128 개발환경 설정 아이티즌 기술연구소
에어 PHP 입문.
시스템 인터페이스 Lab#5 쉡 실습.
2장. 솔라리스10 설치. 2장. 솔라리스10 설치 Solaris 3. 솔라리스10 설치 후 설정하기 1. 텔넷 ( telnet ) 서비스 사용 SSH ( Secure Shell ) 서비스 사용 FTP ( File Transfer Protocol )서비스 사용 시스템.
2장 PHP 기초 PHP의 시작과 끝을 이해한다. 주석문에 대하여 이해한다. echo 문을 이용하여 화면에 출력하
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
Linux 9.X 기초에서 활용까지 Chapter 06 VI 편집기.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
Chapter 10 데이터 검색1.
함수, 모듈.
9 브라우저 객체 모델.
8장 선택 논리 II 1. 논리연산자 1.1 논리연산자 : AND (&&) 1.2 논리연산자 : OR (||)
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
Chapter 07. 사용자 관리 Solaris3. 사용자 암호 관리 및 소유권 관리
1. SNMP Setting IP 설정 NetAgent Mini 카드에 제공된 CD의 Netility 프로그램을 설치하여 프로그램을 실행시킨다. Netility 프로그램을 실행하면 네트워크에 있는 SNMP 카드를 찾게 됩니다. “Configure”를 선택하면 IP 설정.
6 객체.
SPL-Duino 블록 편집기 이용하기 전류센서 블록 만들기 SPL-Duino 블록 편집기를 실행합니다.
Intelligent software Lab. 전재원
Presentation transcript:

Chapter 05. 셸 (shell ) 관리 Solaris 3. 셸 스크립트 작성 솔라리스10 Chapter 05. 셸 (shell ) 관리 Solaris 3. 셸 스크립트 작성

1. 셸 스크립트의 이해 셸 스크립트는 읽기(read), 쓰기(write), 디버깅(debugging)으로 되어 있다. 셸 스크립트의 핵심요소 3가지 변수 설정에 대한 이해 ( 변수명=변수값 ) 위치인자에 대한 이해 ($0, $1, $2, $3 , $# , $@, $* .. ) 제어문 구조에 대한 이해 ( if, case, for, while )

2. 셸 스크립트의 작성 셸 스크립트 작성 요구 사항 루트 파일 시스템(/)의 사용률이 80%를 넘었을 경우 관리자에게 경고 메시지를 화면에 뿌리고 경고 메일을 보낸다. 80%가 넘지 않을 경우 30분 간격으로 체크한다. 1. 셸 스크립트를 작성할 셸 선택 ( #!/bin/ksh 2. 프로그램에 주석 달기 ( # 뒤에 주석 달기 ) 3. 명령어를 충분히 테스트하기 4. 변수 설정하기 5. 변수의 값을 확인하기 6. 셸 스크립트 퍼미션 변경하기 7. 셸 스크립트 실행하기

echo, print 명령어 테스트하기 쿼팅(Quoting)의 이해 문자열 보여주기 커서 입력대기 ( echo “문자열 \c “ ) ( print -n “ 문자열 “ ) 쿼팅(Quoting)의 이해 싱글 쿼트 ( ‘ ‘ ) : 문자 그대로 보여준다. 더블 쿼트 ( “ “ ) : 특수 문자의 의미를 일부는 해석하고 일부는 해석하지 않는다. 백쿼트 ( ` ` ) : 명령어를 실행한다. 역슬래쉬 ( \ ) : 바로뒤에 나오는 특수문자를 해석하지 않는다.

3. 셸 스크립트 디버깅 셸 스크립트는 인터프리터 언어(Interpreter Language)이기 때문에 에러가 나면 실행을 멈추고 어느 라인에서 에러가 났는지를 확인해 준다. # ksh -x 스크립트명 스크립트를 실행할 경우 –x 옵션을 사용하면 한줄씩 해석하면서 소스코드와 실행 결과를 한꺼번에 같이 보여준다. 스크립트 내에 set -x 라는 명령어를 넣어줘도된다.

4. 조건문 (if, case ) if 조건문 콘쉘(ksh) 조건식 숫자 비교 if 조건식(conditional Expressions) then 실행할 명령어 else fi 조건식 설명 (( $A > $B )) 숫자 A 가 B 보다 큰 경우 (( $A < $B )) 숫자 A 가 B 보다 작은 경우 (( $A >= $B )) 숫자 A 가 B 보다 크거나 같은 경우 (( $A <= $B )) 숫자 A 가 B 보다 작거나 같은 경우

콘셸 문자열 비교 콘셸 파일 테스트 조건식 설명 -f file 파일인지 테스트, 파일이면 참 파일이 아니면 거짓이다. [[ $VAR = 문자열 ]] 변수(VAR)의 값과 문자열이 같은지 비교 [[ $VAR != 문자열 ]] 변수(VAR)의 값과 문자열이 같지 않은지 비교 조건식 설명 -f file 파일인지 테스트, 파일이면 참 파일이 아니면 거짓이다. -d directory 디렉터리면 참, 아니면 거짓이다. -e file 파일이 존재하면 참, 없으면 거짓이다. -s file 파일의 크기가 0보다 크면 참, 0이면 거짓이다. -z $변수명 변수값이 있으면 참, 변수값이 없으면 거짓이다.

조건식 연산자 조건식 연산 기호 설명 조건식1 || 조건식2 조건식1이 참이거나 조건식2가 참이면 전체적으로 참이다. 조건식1 || 조건식2 조건식1이 참이거나 조건식2가 참이면 전체적으로 참이다. 조건식1 && 조건식2 조건식1과 조건식2가 참이어야 전체적으로 참이다. ! 조건식 조건식이 거짓이면 참이다. (조건식) 조건식이 여러 개일 경우 그룹을 지을 수 있다.

solaris10 # vi shell_07.ksh #!/bin/ksh # 루트파일시스템 사용량을 DISKUSAGE 변수에 넣는다. # ` ` 백쿼트는 명령어를 실행하라는 의미이다. 실행된 명령어의 결#과 값을 DISKUSAGE 변수에 설정한다. DISKUSAGE=`df -k | grep '\/$' | nawk '{print $5}' | sed 's/%//' ` # echo $DISKUSAGE if (( $DISUSAGE >= 80 )) then echo " 루트파일시스템이 80% 를 넘었습니다. 확인 요망 " mailx -s " 루트 파일 시스템 경고 " root << END 루트 파일시스템이 80%를 넘었습니다. 파일 시스템을 체크 하세요 !! END # END 문자 앞에 공백이 없다. fi solaris10 # chmod 755 shell_07.ksh

히어 도큐먼트 ( here document ) 명령어 << END 입력하고 싶을 문자열 입력하고 싶은 만큼 입력한다. END END 문자열은 프로그래머가 정할 수 있다. 두번째 END는 항상 라인의 처음에 와야 한다. 보기 좋게 하기 위해 공백을 앞에 주면 문법 에러가 난다.

조건문2. case 구문 case case "변수" in 변수값1| 변수값2) # 파이프( | ) 는 여러 개의 변수값이 동일한 명령어 실행될 명령어 # 를 실행할 경우 사용한다. ;; # case 구문에서 스크립트 블록이 종료될 때 더블 세미콜 # 론( ;; ) 을 사용한다. 변수값3) 실행될 명령어 ;; 변수값4) *) 실행될 명령어 # 주로 명령어 사용법을 기술한다. esac

banner.sh solaris10 # vi banner.ksh #!/bin/ksh case "$1" in start) banner start ;; stop) banner stop *) echo "Usage : $0 { start | stop } " exit 1 esac solaris10 # chmod 755 banner.ksh

3. 위치 인자(positional parameter)의 이해 pp 변수명 의 미 $0 셸 스크립트 이름 $1 스크립트 이름 다음의 첫 번째 인자 $2 두 번째 인자 $3~$9 세 번째부터 여덟 번째 인자 ${10}~${N} 열 번째 인자, N의 값에 표시하고자 하는 인자값을 넣는다. $* 모든 인자 $@ $# 인자의 총 개수

solaris10 # vi pp.ksh #!/bin/ksh echo "Script name : $0 " echo "first argument : $1 " echo "second argument : $2 " echo "third argument : $3 " echo "fourth argument : $4 " echo "fifth argument : $5 " echo "sixth argument : $6 " echo "seventh argument : $7 " echo "eighth argument : $8 " echo "ninth argument : $9 " echo "tenth argument : ${10} " echo "All argument : $* " echo "All argument : $@ " echo "Number of all argument : $# “ solaris10 # chmod 755 pp.ksh solaris10 # ./pp.ksh a b c d e f g h i j

본쉘 스타일 solaris10 # cat /etc/init.d/volmgt #!/sbin/sh # # Copyright 2006 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # ident "@(#)volmgt 1.9 SMI" case "$1" in 'start') if [ -f /etc/vold.conf -a -f /usr/sbin/vold -a \ "${_INIT_ZONENAME:=`/sbin/zonename`}" = "global" ]; then echo 'volume management starting.' svcadm enable svc:/system/filesystem/volfs:default fi ;; 'stop') svcadm disable svc:/system/filesystem/volfs:default *) echo "Usage: $0 { start | stop }" exit 1 esac exit 0

/etc/init.d/volmgt 를 콘셸 스타일로 변경 #!/bin/ksh # # Copyright 2006 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # ident "@(#)volmgt 1.9 SMI" case "$1" in 'start') if [[ -f /etc/vold.conf && -f /usr/sbin/vold && \ "${_INIT_ZONENAME:=`/sbin/zonename`}" = "global" ]]; then echo 'volume management starting.' svcadm enable svc:/system/filesystem/volfs:default fi ;; 'stop') svcadm disable svc:/system/filesystem/volfs:default *) echo "Usage: $0 { start | stop }" exit 1 esac exit 0

5. 제어문의 반복구조 ( for, while ) for 구문 리스트(list)로 올 수 있는 형태 첫 번째 - 직접 값을 나열 한다. 예를 들어 1 2 3 4 5 6 7 8 9 를 나열한다. 두 번째 - 백쿼트(` `) 안에 명령어를 입력해 그 결과들을 리스트로 사용한다. 세 번째 - 애스터리스크(*)를 사용해 파일명을 대체 한다. 네 번째 – 변수 명을 사용해 변수 값을 리스트로 사용할 수 있다. for 변수 in 리스트(list) # 리스트는 여러 개의 값이 올 수 있다. do # do 와 done 사이에는 리스트에 있는 값들이 다 처리 될 실행할 명령어 # 때까지 실행할 명령어를 넣는다. done

/etc/rc3 파일 발췌 01 if [ -d /etc/rc3.d ]; then 02 for f in /etc/rc3.d/K*; do 03 if [ -s $f ]; then 04 case $f in 05 *.sh) /lib/svc/bin/lsvcrun -s $f stop ;; 06 *) /lib/svc/bin/lsvcrun $f stop ;; 07 esac 08 fi 09 done 10 11 for f in /etc/rc3.d/S*; do 12 if [ -s $f ]; then 13 case $f in 14 *.sh) /lib/svc/bin/lsvcrun -s $f start ;; 15 *) /lib/svc/bin/lsvcrun $f start ;; 16 esac 17 fi 18 done 19 fi

while 구문 while 조건식 do 실행할 명령어 done

solaris10 # vi adduser.ksh #!/bin/ksh i=1 while (( i <= 100 )) do if [[ ! -e /home1 ]] ; then mkdir /home1 fi /usr/sbin/useradd -d /home1/user$i -m -s /bin/ksh user$i /bin/echo " adding user : user$i “ /usr/bin/passwd -d user$i (( i = i + 1 )) done solaris10 # chmod 755 adduser.ksh solaris10 # ./adduser.ksh

while로 메뉴 만들기 결과 화면 ***** 프로그램을 선택하시오 **** 1. 프로세스 관리 2. 사용자 관리 3. CRON 관리 4. 백업 관리 q. 프로그램 종료 메뉴를 선택하시오 ?

solaris10 # vi program.ksh #!/bin/ksh clear while true do echo "***** 프로그램을 선택하시오 **** 1. 프로세스 관리 2. 사용자 관리 3. CRON 관리 4. 백업 관리 q. 프로그램 종료 메뉴를 선택하시오? \c " read PROGRAM

case "$PROGRAM" in 1) process_mgt.ksh ;; 2) user_mgt.ksh 3) cron_mgt.ksh 4) backup_mgt.ksh q) echo " Program Exit " exit 0 esac done solaris10 # chmod 755 program.ksh

6. 함수의 활용 # 함수명 정의부 함수명() { 스크립트 내용 셸 함수 정의 및 호출 } #스크립트 본문 함수명 # 함수 호출

함수테스트 #!/bin/ksh ftest() { for i in 1 2 3 4 5 6 7 8 9 do A=$(( $DAN * $i )) echo "$DAN * $i = $A“ done } echo “단을 입력하시오? \c" read DAN

while true do echo ftest $DAN echo “단을 입력하시오? \c" read DAN done

solaris10 # vi shell_08.ksh #!/bin/ksh # network interface instance # which_inst() 함수 정의부 which_inst () { case "$1" in hme*) echo $1 | sed 's/hme//' ;; qfe*) echo $1 | sed 's/qfe//' ;; vmxnet*) echo $1 | sed 's/vmxnet//' ;; esac }

# print_link() 함수 정의부 print_link() { LINK_STATUS=`/usr/sbin/ndd /dev/$1 link_status` > /dev/null 2>&1 LINK_SPEED=`/usr/sbin/ndd /dev/$1 link_speed` > /dev/null 2>&1 LINK_MODE=`/usr/sbin/ndd /dev/$1 link_mode` > /dev/null 2>&1 case "$1" in hme* | qfe* ) print if [[ $LINK_STATUS = 1 ]]; then echo "Link Status is up" else echo "Link Status is down" fi if [[ $LINK_SPEED = 1 ]]; then echo "Link Speed is 100Mbps" else echo "Link Speed is 10Mbps" if [[ $LINK_MODE = 1 ]]; then echo "Link Mode is Full Duplex" else echo "Link Mode is Half Duplex" ;; esac }

clear while true do print print -n ". 네트워크 관리 프로그램 clear while true do print print -n "***** 네트워크 관리 프로그램 ***** 1) 네트워크 카드 보기 2) 네트워크 카드별 Duplex 보기 q) 프로그램 종료(Enter) 메뉴를 선택하세요 ( 1,2,q) ? " read NET case "$NET" in 1) /usr/sbin/ifconfig -a print -n "아무키나 누르시오 " read KEY ;;

2) print print -n "네트워크 카드를 선택하시오 ? " read NETCARD INST=`which_inst ${NETCARD}` # which_inst() 함수 호출 case "$NETCARD" in hme*) DEV=hme /usr/sbin/ndd -set /dev/${DEV} instance ${INST} print_link ${DEV} # print_link() 함수 호출. ;; qfe*) DEV=qfe print_link ${DEV} # print_link() 함수 호출. vmxnet*) DEV=vmxnet print_link ${DEV} # print_link() 함수 호출. esac print -n "아무키나 누르시오 " read KEY

q|"") print print "프로그램을 종료합니다. " exit 2 ;; esac done solaris10 # chmod 755 shell_08.ksh solaris10 # ./shell_08.ksh