Homework 4… 11월 4일(금) 11:59pm 까지 Bash 셸 프로그램 개선 교재 p185 연습문제

Slides:



Advertisements
Similar presentations
Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
Advertisements

Apr. 25, 2013 Laboratory of Systems Medicine BASIC LINUX COMMANDS.
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
쉘 스크립트와 cron coearth, george.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
SHELLScript ? 04 Spring SPARCS
Excel 일차 강사 : 박영민.
4. Bourne 셸.
Chapter 7. 조건문.
리눅스 기본 명령어 및 Vi 명령어 정리 2015/1, 컴퓨터의 개념 및 실습.
 13장. 배시쉘 프로그래밍.
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
제6장 C 쉘(C Shell) 숙명여대 창병모
7장. 셸 스크립트 프로그래밍.
Root Filesystem Porting
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
정보검색 환경세팅 및 쉘스크립트 맛보기 IS lab. 김건영.
Root Filesystem Porting
Homework 6… 12월 2일(금) 11:59pm까지 자신의 이름과 학번을 출력해 주는 유닉스/리눅스 네트워크 소켓 서버 프로그램 과 클라이언트 프로그램 을 작성해 보세요 참고 (실습1) Hello 프로그램 helloserver.c helloclient.c 컴파일.
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
6장. printf와 scanf 함수에 대한 고찰
Chapter 07. 기본 함수 익히기.
C++프로그래 밍 컴퓨터정보과 / 이기희교수.
KIM HEESANG PL/SQL 2 KIM HEESANG
기본 셸로는 Bash 셸을 사용하라. 하지만 스트립트를 실행하기 위해서는 Bourne 셸을 사용하라.
Cross Compiler를이용한 커널 컴파일 및 포팅
JA A V W. 03.
어서와 C언어는 처음이지 제14장.
제4장 유닉스 쉘 숙명여대 창병모 2011 가을.
시스템 인터페이스 Lab3 Unix 사용법 실습.
Linux/UNIX Programming
솔라리스10 3장. 솔라리스 패키지 관리.
24장. 파일 입출력.
Linux/UNIX Programming
UNIX Unbounded A Beginning Approach
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
김선균 컴퓨터 프로그래밍 기초 - 7th : 함수 - 김선균
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
U N I X 창원대학교 전자계산학과 김병찬.
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
Homework 7… 마지막 수업시간까지 (실습) 매개변수로 입력 받아 처리할 수 있도록 수정해 보세요
Linux/UNIX Programming
Linux/UNIX Programming
제 6 강 Getting started.
제 15 강 문자와 코드 shcho.pe.kr.
시스템 인터페이스 Lab#5 쉡 실습.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
Linux 9.X 기초에서 활용까지 Chapter 06 VI 편집기.
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
Chapter 10 데이터 검색1.
시스템 인터페이스 Lab1 X-window 및 명령어 사용.
Homework #3 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
함수, 모듈.
4. 셸을 이용한 명령어 입력. Unix 시스템 쉘 간단한 셸 명령 명령 매개변수(Command arguments)
제4장 유닉스 쉘 숙명여대 창병모
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
과제 4: Thread (5월 9일까지) 4장 연습문제 풀이
Microsoft Word 2002 제1장 문자열의 삽입과 변경.
어서와 C언어는 처음이지 제21장.
Docker Study 6~7.
Linux/UNIX Programming
Linux/UNIX Programming
SPL-Duino 블록 편집기 이용하기 전류센서 블록 만들기 SPL-Duino 블록 편집기를 실행합니다.
Intelligent software Lab. 전재원
제 10 강 문자 입출력.
1. 실습 시간에 수행한 avd 생성 및 실행, adb shell 접속 및 명령어 수행 결과를 제출한다.
Presentation transcript:

Homework 4… 11월 4일(금) 11:59pm 까지 Bash 셸 프로그램 개선 교재 p185 연습문제 watchfor: 한 사람 이상 조사할 수 있도록 개선 pick: 매개변수 없을 때도 동작하도록 개선 checkmail: 메일 받은 날짜와 시간 표시하도록 개선 교재 p185 연습문제 4.다음처럼 동작되는 calu.bash 유틸리티를 작성하라 calu는 정수에 대한 산술연산을 수행한다. –k 옵션은 calu에서 사용될 수 있는 연산자와 형식을 설명한다 5. 다음처럼 동작되는 sum.bash 유틸리티를 작성하라 sum은 정수에 대한 자동합계를 구하는 스크립트이다 n은 양의 정수이다 Unix/Linux

과제 제출 방법 Electrical Version1 Electrical Version2 fedora.incheon.ac.kr (117.16.244.59): /home/ul2011hwa 또는 ul2011hwb 또는 ul2011hwc에 자신의 학번으로 숙제방(디렉토리) 만들고 그 안에 복사 자신의 디렉토리 보호 권장: chmod 1700 directoryname Electrical Version2 multi.incheon.ac.kr (117.16.244.53): /export/home/ul2011hwa 또는 ul2011hwb 또는 ul2011hwc에 자신의 학번으로 숙제방(디렉토리) 만들고 그 안에 복사 컴퓨터 사이의 파일 복사는 ftp 를 이용하세요! vi 편집기 내용을 윈도우 파일로 복사하는 방법 telnet 화면상에서 복사할 내용 부분을 드래그 한 후 <enter>를 하면 복사가 되고 텍스트 편집기(메모장 등)에서 Ctrl+V를 하면 복사한 내용이 붙여 넣기가 됩니다 Unix/Linux

본 셸 프로그램 1 문제 1: 다음은 3초 마다 한번씩 stu가 로그인 했는지 조사하는 본 셸 프로그램 watchfor이다. 이 프로그램을 참조하여 매개변수로 입력된 사람이 로그인 했는지 조사하되 한 사람 이상도 매개변수로 입력하여 조사할 수 있도록 수정해보세요. (예, $ watchfor 'mysung|root|stu') [Hint: egrep] $ cat watchfor #!/bin/sh until who | grep stu do sleep 3 done echo stu is logged in Unix/Linux

정규 표현식 정규식의 예 [교재 p194, p413 참조] (주의1) 반드시 단일 따옴표 안에 ! (주의2) *, +, ? 은 이전 문자에 적용됨 grep, egrep 정규 표현식 : . [] * ^ $ \ (예) .nd ^.nd sw.*ng [A-D] \. a. a.$ im*ing egrep 확장 정규 표현식 : + ? | () (예) s.*w s.+w off|will im*ing im?ing 정규 표현식: grep 특수문자 . 임의의 단일 문자 [ ] 괄호안의 단일 문자 중 어느 것과 일치 * 문자 다음에 나타남, 바로 앞의 문자가 0번 h는 그 이상 발생 ^ 줄의 시작, [ ] 안에서는 제외(except) 의미 $ 줄의 끝 \(백슬래시) 메타 문자 앞에 위치, 메타 문자의 특수 의미 제거 확장 정규 표현식: egrep + 단일문자가 1번 이상 발생 ? 단일 문자가 0번 혹은 1번 발생 |(파이프 기호) “or” 연산자 역할 ( ) *, +, ? 메타문자가 괄호 안의 전체 표현식에 대해 동작 Unix/Linux

정규 표현식 (Regular Expression) 메타 문자 표:

정규 표현식 (Regular Expression) 예제:

정규 표현식 (Regular Expression) 확장 정규 표현식: egrep과 같은 유틸리티들은 확장된 메타 문자들을 지원한다

본 셸 프로그램 2 문제 2: 다음의 pick은 매개변수로 입력된 인수들을 취사선택하는 본 쉘 프로그램이다. 이 프로그램을 코딩하여 실행해 보고, 명령 줄에 아무것도 없으면 표준 입력으로부터 인수를 읽을 수 있도록 프로그램을 수정하라. 빈 칸을 적절히 다루고, q 도 잘 동작하도록 해보세요. $ cat pick #!/bin/bash for i do echo –n “$i? ” read response case $response in y*) echo $i ;; q*) break esac done Unix/Linux

본 셸 프로그램 3 문제 3 : 다음의 checkmail 본 쉘 프로그램은 명령 줄 매개변수로 입력된 값을 주기로 하여(단, 매개변수 입력이 없으면 3초로 지정) 반복적으로 전자우편함의 크기를 조사하여 메일이 왔는지를 알려주는 프로그램이다. 이 프로그램을 코딩하여 실행해 보고 마지막 메일이 온 날짜와 시간을 출력하도록 수정하세요. [Hint: /var/mail/`logname`의 마지막 수정시간] (Bonus: 메시지에 메일을 보낸 사람의 이름이 나타나도록 해보세요) [Hint:메일 파일의 From 행 참조 ) $ cat checkmail #! /bin/sh MAIL=/var/mail/`logname` t=${1-3} x=“`ls -l $MAIL`” while : do y=“`ls -l $MAIL`” echo $x $y x=“$y” sleep $t done | awk ‘$5 < $14 {print “You have mail”}’ Unix/Linux

(참고) junk.ksh Unix/Linux #! /bin/bash # junk script # Lorn shell version # author: Graham Glass # 9/25/91 # Initialize variables fileCount=0 # the number of files specified. listFlag=0 # set to 1 if the list option (-) is used. purgeFlag=0 # set to 1 if the purge (-p) option is used. fileFlag=0 # set to 1 if at least one file is specified. junk=~/.junk # the name of the junk directory. error () { # Display error message and quit cat << ENDOFTEXT echo Dear $USER, the usage of junk is as follows: echo junk -p means "purge all files" echo junk -l means "list junked files" echo junk <list of files> to junk them ENDOFTEXT exit 1 } # Parse command line for arg in $* do case $arg in "-p") purgeFlag=1 ;; "-l") listFlag=1 ;; "-*") echo $arg is an illegal option ;; *) fileFlag=1 fileList[$fileCount]=$arg # append to list let fileCount=fileCount+1 ;; esac done # Check for too many options let total=$listFlag+$purgeFlag+$fileFlag if (( total != 1 )) then error fi # If junk directory doesn't exist, create it if [[ ! (-d $junk) ]] 'mkdir' $junk # "mkdir $junk"is OK # Process options if (( listFlag == 1 )) 'ls' -lgF $junk exit 0 Fi if (( purgeFlag == 1 )) 'rm' $junk/* if ((fileFlag == 1 )) 'mv' ${fileList[*]} $junk # move files to junk directory. Unix/Linux

프로그램 가능한 텍스트 처리: awk awk : Aho, Weinberger, Kernighan awk -Fc [-f fileName] 'program' {variable=value}* {fileName}* -Fc 입력줄의 항목 구분자를 c로 정함 (default:tab이나 공백) -f fileName awk 프로그램을 화일로 만들었을 때 이를 지정함 'program' awk 명령어 안에 awk프로그램을 직접 기록한 경우 {variable=value}* 프로그램을 위한 변수 치환 {fileName}* 입력 줄을 표준 입력이 아닌 지정된 파일에서 받아들임 Unix/Linux

프로그램 가능한 텍스트 처리 awk 'program': 다음의 형식으로 된 하나 이상의 명령어 [ condition ] [ \{ action \} ] condition: BEGIN(첫번째 줄을 읽기 전), END (모든 줄을 읽고 난 후), 논리 연산자, 관계 연산자, 정규식을 포함하는 조건식 cf. 만일 condition이 생략되면 모든 줄에 대하여 수행됨 action(C-like): if ( 조건 ) 문장 [else 문장] while ( 조건 ) 문장 for ( 연산; 조건; 연산 ) 문장 break continue print printf "형식" next exit 변수 = 연산식 {문장들의 리스트 } action들은 C 언어처럼 semicolon(;)으로 구분함 (cf.) 만일 action이 생략되면 해당 줄은 표준 출력됨 Unix/Linux

프로그램 가능한 텍스트 처리 입력 줄의 항목 접근 BEGIN과 END $ awk '{ print NF, $0 }' float - $1 (첫 번째 항목) $2(두 번째 항목) …… - $0 (줄 전체) - 내장 변수 NF (현재의 입력 줄의 항목 개수) $NF (마지막 항목) - 내장 변수 NR (현재의 입력 줄의 줄 번호) - 내장 변수 FILENAME (입력 화일 이름) BEGIN과 END $ awk '{ print NF, $0 }' float $ cat awk2 BEGIN { print "start of file:", FILENAME } { print $1 $3 $NF } END { print "End of file" } $ awk -f awk2 float cf. print나 printf에서 컴마(,)가 없으면 연속 인쇄, 있으면 공백 인쇄 $ cat awk3 #2,3번째 줄에 대하여 항목 인쇄 NR > 1 && NR < 4 { print NR, $1, $3, $NF } $ awk -f awk3 float Unix/Linux

프로그램 가능한 텍스트 처리 연산자 사용자 정의 변수의 사용 - 초기값: null string 또는 정수 0 $ cat awk3 #2,3번째 줄에 대하여 항목 인쇄 NR > 1 && NR < 4 print NR, $1, $3, $NF $ awk -f awk3 float 사용자 정의 변수의 사용 - 초기값: null string 또는 정수 0 $ cat awk4 #줄을 표준출력에 보내고 줄과 단어 수를 셈 BEGIN { print "Scanning file" } { printf "line %d: %s \n", NR, $0; lineCount++; wordCount += NF; } END { printf "line %d, words = %d\n", lineCount, wordCount } $ awk -f awk4 float Unix/Linux

프로그램 가능한 텍스트 처리 제어구조(C-like) 줄 일치에 확장된 정규식 사용 [1-p709] $ cat awk5 [교재 p317] #각 줄의 항목을 역순으로 출력 { for ( i = NF; i >= 1; i--) printf "%s", $i; printf "\n"; } $ awk -f awk5 float 줄 일치에 확장된 정규식 사용 [1-p709] $ cat awk6 #t와 e 사이에 1개 이상의 단일문자가 나오는 줄 /t.*e/ { print $0 } 조건 범위: 콤마(,)로 분리되는 두 개의 조건 - 처음 조건을 만족하는 줄부터 두 번째 조건을 만족하는 줄까지의 범위 $ cat awk7 #strong 포함하는 줄부터 clear 포함하는 줄까지 /strong/ , /clear/ { print $0 } 내장함수 이용 가능 exp(), log(), sqrt(), int(): C-like substr(str, x, y): x번째 문자부터 y번째 문자까지의 str의 substring $ cat awk8 $ awk -f awk8 test Unix/Linux