제04강 임베디드리눅스 명령 ii

81
임베디드응용및실습 임베디드리눅스 명령 II 1 제04강 임베디드리눅스 명령 II Visual Editor 실습과제 (생략)Shell 및 사용자 환경 설정 실습과제 (생략)Shell Programming 실습과제

Upload: others

Post on 20-May-2022

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 1

제04강

임베디드리눅스 명령 II

Visual Editor

실습과제

(생략)Shell 및 사용자 환경 설정

실습과제

(생략)Shell Programming

실습과제

Page 2: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 2

Visual Editor

-UNIX/LINUX의 표준 화면편집기

-X 윈도우환경 및 컨솔환경에서 동일하게 사용

-RedHat Linux에서는 vim(improved vi)을 제공

* 도움말

# vim tutor

* 세가지 모드

-명령모드 : 삭제, 복사, 붙이기 등

-입력모드 : 글자 입력

-실행모드 : 명령실행

;파일저장 및 읽기, 종료, 외부명령 실행

Page 3: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 3

Visual Editor(계속)

Page 4: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 4

Visual Editor(계속)

* vi 시작

-기본적으로 명령모드로 진입

# vi <파일명>

# vi

# vi file (file2, file3···) ;기존 파일 편집

# vi +9 file ;9번 라인을 중심으로 표시

# vi + file ;끝줄을 중심으로 표시

# vi -R file ;읽기전용으로 vi 실행

Page 5: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 5

Visual Editor(계속)

* 입력 모드

- i(insert), a(append), o(open)

i : cursor의 왼쪽에 text 입력

I : cursor가 있는 라인의 시작에서 text 입력

a : cursor의 오른쪽에 text 입력

A : cursor가 있는 라인의 끝에서 text 입력

o : 커서가 있는 라인 아래에 새라인 삽입후 입력

O : 커서가 있는 라인 위에 새 라인 삽입후 입력

Page 6: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 6

Visual Editor(계속)

* 명령모드

-초기 vi 실행시 기본 모드

-입력모드에서 <ESC>키 누르면 진입

* 표시영역 이동

<ctrl>-f ;내용을 화면 크기만큼 위로 이동

<ctrl>-b ;화면 크기만큼 아래로 이동

<ctrl>-d ;화면 크기의 1/2만큼 위로 이동

<ctrl>-u ;화면 크기의 1/2만큼 아래로 이동

<ctrl>-e ;한 line씩 위로 이동

<ctrl>-y ;한 line씩 아래로 이동

Page 7: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 7

Visual Editor(계속)

* Cursor 이동

h(좌), j(하), k(상), l(우)

;화살표 방향키와 동일하게 이동(한 문자)

H ;현재 화면의 첫 line, 첫 칼럼으로 이동

M ;현재 화면의 중간 line, 첫 칼럼으로 이동

L ;현재 화면의 마지막 line, 첫 칼럼으로 이동

W, w ;현재 위치에서 오른쪽으로 한 단어씩 이동

B, b ;왼쪽으로 한 단어씩 이동

;w, b에서 특수문자는 한 단어로 인식

;W, B에서 space로 단어 구분

Page 8: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 8

Visual Editor(계속)

^(hat) ;cursor가 위치한 line의 첫 문자로 이동

0(zero) ;현 라인의 첫 칼럼으로 이동

$ ;현 라인의 끝으로 이동

9G ;9번째 라인으로 이동

G ;파일의 마지막 라인으로 이동

+ ;다음 라인의 첫 문자로 이동

- ;앞 라인의 첫 문자로 이동

) ;다음 문장으로 cursor 이동

( ;이전 문장으로 cursor 이동

} ;다음 절(문단)로 cursor 이동

{ ;이전 절(문단)로 cursor 이동

Page 9: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 9

Visual Editor(계속)

* 문자열 검색

/<str> ;순방향으로 검색하여 첫번째 문자열로

cursor 이동 (대·소문자 구별)

/<ENTER> ;순방향으로 직전 검색을 연속 검색

?<str> ;역방향으로 문자열 검색

?<ENTER> ;역방향으로 직전 검색을 연속 검색

n ;검색후 순방향의 다음 문자열로 이동

N ;검색후 역방향의 문자열로 이동

Page 10: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 10

Visual Editor(계속)

* 삭제

x ;cursor가 위치하고 있는 한 문자 삭제

X ;cursor의 위치 앞 한 문자 삭제

dw ;cursor 위치에서 오른쪽 한 단어 삭제

db ;cursor 위치에서 왼쪽의 한 단어 삭제

D ;cursor 위치부터 그 line 끝까지 삭제

dd ;cursor가 위치하는 line 삭제

9dd ;cursor가 위치하는 line포함 9개 라인 삭제

Page 11: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 11

Visual Editor(계속)

* 문자, 단어, line 치환

r ;cursor 위치의 한 문자만 치환

R ;cursor 위치부터 오른쪽으로 여러문자 치환

;<ESC> key로 치환 중지

~(tilde) ;대소문자치환을 한 문자씩

cw ;현 커서의 단어 단위로 치환

cc ;현 라인을 치환(현라인 제거)

C ;현 라인의 커서이후 치환

Page 12: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 12

Visual Editor(계속)

* 명령 취소 및 반복

u ;직전 행한 하나의 명령의 결과를 취소

U ;그 라인에서 행한 모든 명령을 취소하고

file 복구

<ctrl>-r ;직전 취소한 것 되돌리기

. ;직전에 수행한 명령을 반복

Page 13: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 13

Visual Editor(계속)

* 복사(yank)와 붙이기(paste)

yw ;cursor 위치한 단어 복사

Y, yy ;cursor 위치한 line을 buffer에 복사

9Y, 9yy ;cursor 위치한 line부터 n개 라인 복사

p ;복사된 내용을 현재 cursor의 오른쪽,

또는 아래 line에 붙이기

P ;왼쪽, 또는 윗 line에 붙이기

* line 결합

J ;현 line과 다음 line을 결합

Page 14: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 14

Visual Editor(계속)

* 실행모드

-명령모드에서 ':'키 누르면 진입

-하단 상태표시줄에 실행명령입력후 <enter>

-명령 수행후 명령모드로 자동 복귀

-이동

:9 ;file의 9번째 line으로 이동

Page 15: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 15

Visual Editor(계속)

-문자열 치환

:%s/old/new/g ;old를 new로 치환

:%s/^old/new/g ;행의 첫 단어가 old인 것을

new로 치환

:%s/old$/new/g ;행의 끝 단어가 old인 것을

new로 치환

:%s/old//g ;old를 모두 삭제

:g/old/s//new/g ;현재 file내에서 old를 new로

모두 치환(대·소문자 구별)

Page 16: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 16

Visual Editor(계속)

-file 저장 및 종료

:w file ;file로 일단 저장

:q ;vi종료(수정부분 있으면 종료불가)

:q! ;수정한 부분 저장않고 vi 종료

:wq file ;file로 저장하고 vi 종료

:w %.old ;file의 세대별 관리위해

;현재 파일뒤에 .old를 붙여 저장

:1,12w file ;1,...,12라인을 file로 저장

Page 17: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 17

Visual Editor(계속)

* marking : 특정라인을 추후 참조하고자

-문자(a-z, A-Z)수 만큼 마킹 가능

-마킹 위치로 이동 : '<문자>

예) a로 마킹한다고 가정

-마킹위한 라인으로 이동 후, :ka<enter>

-임의 위치로 커서 이동

-마킹 위치 이동하려면, 'a를 누름

Page 18: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 18

Visual Editor(계속)

* 파일의 일부(블록)를 파일로 저장

-블록의 시작라인에 마킹

-블록의 끝라인으로 커서 이동

-:'<문자>, w! file

예) p로 마킹하고, tmp파일로 저장한다고 가정

-저장할 블록의 첫 라인으로 이동 후, :kp<enter>

-저장할 블록의 끝 라인으로 커서 이동 후,

:'p, w! tmp<enter>

Page 19: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 19

Visual Editor(계속)

* 기타 명령

:set all ;vi 환경설정 관련 항목

:se nu ;각 라인에 line 번호 표시

:se nonu ;line 번호 표시제거

:e file ;vi 종료없이 file을 읽어 들임

:r file ;cursor의 다음 line에 file을 삽입

:! linuxCommand ;vi 종료없이 linux 명령 수행

예) :! ls -al

:sh ;vi 종료없이 쉘 prompt 상태로 이동

;<ctrl>-D 혹은 exit로 복귀

Page 20: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 20

실습과제

[실습 1] 문서작성을 통해 중요 키 사용법 숙지

-문서작성 및 저장

-특정 문자열 탐색

-특정 문자열을 다른 문자열로 대체

-블록 삭제, 다른 곳에 붙이기

-블록 복사, 다른 곳에 붙이기

-특정 블록을 임의파일로 저장

-특정 파일을 임의 위치로 삽입

Page 21: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 21

Shell 및 사용자 환경 설정

* 쉘(Shell)

-명령어 해석기

-시스템과 사용자간의 대화창구

* Shell의 기능

-내부명령, 외부명령 실행 명령프롬프트

-여러 명령 연결 : 파이프(|)

-입/출력 리다이렉션 ( >,<,>>,<<,2> )

-특수문자 해석 및 치환, 명령어 치환

-지역/환경변수 관리

-스크립트 프로그래밍 언어 제공(자동화 작업)

Page 22: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 22

Shell 및 사용자 환경 설정(계속)

* 쉘 종류

-Bourne 쉘, Bourne Again Shell (bash)($)

-C 쉘, 확장 C 쉘(tcsh)(%)

-Korn Shell, V Shell…

-각 쉘별 기본 기능 및 작동법은 유사함

* 쉘간 변경

$ tcsh ;tcsh 쉘로 전환

% ;tcsh prompt

% exit ;tcsh을 종료(bash로 복귀)

$ ;bash prompt

Page 23: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 23

Shell 및 사용자 환경 설정(계속)

-기본 Shell :GNU Bourne Again Shell(/bin/bash)

C 문법을 많이 도용

* bash의 환경설정 파일

-모든 사용자 공통의 환경설정 파일

: /etc/profile, /etc/bashrc

-사용자별 환경설정 파일

: .bash_profile, .bashrc, .bash_logout

원본파일 /etc/skel/ 디렉터리에 존재

사용자 추가마다 각 사용자의 홈디렉터리에 복사

Page 24: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 24

Shell 및 사용자 환경 설정(계속)

* 환경설정 파일 인식 순서

/etc/profile ->

~/.bash_profile ->

~/.bashrc ->

/etc/bashrc

Page 25: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 25

Shell 및 사용자 환경 설정(계속)

* echo

-echo는 뒤에 나오는 문자열 출력

# echo SHELL

# echo Hello, Everyone!!

* 메타 문자

-Shell이 해석하는 특수한 기능을 가진 문자 : '$'

# echo $SHELL

;'$'는 뒷단어를 변수로 인식, 그 내용 출력

-메타문자 해석 금지 : '\' 앞 세움

# echo \$SHELL ;'$SHELL' 문자열 출력

Page 26: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 26

Shell 및 사용자 환경 설정(계속)

* 패스 설정

-현재 path 설정 확인

# echo $PATH

-PATH에 디렉터리 추가(':'으로 구분)

-/etc/profile편집후, 재부팅 ;전체사용자 적용

-~/.bash_profile 편집후, 다시 로그인

;특정 사용자에게 적용

-현재 로그인에서만 임시 추가(로그아웃시 소멸)

# echo $PATH

# PATH=$PATH:<추가할 디렉터리>

Page 27: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 27

Shell 및 사용자 환경 설정(계속)

* 에일리어스(별칭)

-명령에 대한 재명명 혹은 단축형

-개인별 alias 설정정보 확인

# alias <enter>

-별칭 등록

/etc/bashrc 편집 ;전체사용자적용

~/.bashrc 편집 ;특정사용자적용

예) alias lsa='ls -a' 추가

Page 28: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 28

Shell 및 사용자 환경 설정(계속)

* 사용자 프롬프트 변경

-/etc/bashrc 편집

PS1="[\u@\h \W] \\$

=> PS1="[\u@\h \$PWD] \\$ ;절대경로 표시

\u : 사용자명

\h : 호스트명

\W : 현 위치

\$PWD : 작업디렉터리의 전체경로

Page 29: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 29

Shell 및 사용자 환경 설정(계속)

* 로그아웃시의 실행

~/.bash_logout 편집

Page 30: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 30

실습과제

[실습 1] 쉘 변경

-bash, csh, tcsh 제공

# csh

~...]#

~...]# exit

[실습 2] PATH 추가

-실행파일 mytest를 어디서나 실행가능토록

* 특정 사용자 임시

* 특정 사용자 항시

* 모든 사용자 항시

Page 31: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 31

실습과제(계속)

[실습 3] 프롬프트(PS1) 변경

PS1="[\u@\h \$PWD] \\$ "

[실습 4] Alias(별칭) 설정

-이미 친숙한 DOS 명령처럼

예) alias dir='ls -al'

alias cls='clear'

Page 32: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 32

Shell Programming

* 쉘 스크립트(Shell Script) 작성

# vi test

* 실행방법

-shell을 통하여

# sh test

-실행파일화하여

# chmod 777 test

# ./test

Page 33: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 33

Shell Programming

* 쉘 변수의 특징

-미리 선언할 필요 없음

-데이터형이 없음

-대소문자를 구별함

-기본적으로 데이터를 문자열로 저장함

(수치를 대입해도 문자열로 저장)

연산시 수치로 자동변환하여 계산후 문자열로 저장

-쉘변수에 값을 대입할 때는 "$"를 사용하지 않음

VAR=12345

-쉘변수의 값 참조는 변수명 앞에 "$"를 붙여 참조

ECHO $VAR

Page 34: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 34

Shell Programming(계속)

* 환경변수

-쉘을 기동하면 기본적으로 설정되어 있는 변수

$0 ;실행된 쉘 스크립트 이름

$# ;스크립트에 넘겨진 인자수

$$ ;쉘 스크립트의 프로세스 ID

* 인자 변수

-쉘 스크립트에 넘겨주는 인자 정보를 갖는 변수

$1,…, $n ;넘겨진 인자들

$* ;인자들을 모아놓은 문자열

$@ ;$*과 동일

Page 35: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 35

Shell Programming(계속)

* 일반 변수

-특별한 제약없이 대소문자 구분하여 사용

-환경 변수로 지정된 변수명은 피할 것

Page 36: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 36

Shell Programming(계속)

* 예제 1 : 인자변수 테스트

# vi test1

#!/bin/sh

echo "This Script Executable File : $0"

echo "Argument Count : $#"

echo "Process ID : $$"

echo "Argument List \$* : $*"

echo "Argument List \$@ : $@"

echo "Argument 1 : $1"

echo "Argument 2 : $2"

echo "Argument 3 : $3"

echo "Argument 4 : $4"

Page 37: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 37

Shell Programming(계속)

# chmod 755 test1

# ./test1 a1 a2 a3 a4

This Script Executable File : ./test1

Argument Count : 4

Process ID : 905

Argument List $* : a1 a2 a3 a4

Argument List $@ : a1 a2 a3 a4

Argument 1 : a1

Argument 2 : a2

Argument 3 : a3

Argument 4 : a4

Page 38: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 38

Shell Programming(계속)

* expr

예) expr 10 \* 5`-연산 기호 유형

\* : 곱하기, \/ : 나누기, % : 나머지

+ : 더하기, - : 빼기,

=, \>, \<, \<=, \>=, != : 비교 연산자

\& : AND 연산자, \| : OR 연산자

\(, \): 괄호,

length <str> : <str>의 길이 반환

Page 39: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 39

Shell Programming(계속)

* 산술식

-형식 : 변수 = $((산술식))

-산술식 내에 변수($1, $a와 같은) 사용 가능

예) var=$(($kor+$eng+$mat))

-산술식 내에 숫자가 아닌 문자열, 또는 문자열이

담겨있는 변수는 계산에서 제외됨을 유의

Page 40: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 40

Shell Programming(계속)

* 예제 2 : expr 및 산술식 테스트

var1=`expr 5 \* 10` echo $var1

var2=$((5*10))

Echo $var2

echo `expr length Programming!`

Page 41: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 41

Shell Programming(계속)

* 매개변수 확장

-변수의 값을 문자열 등으로 대체 및 조작을 의미

-word에는 와일드 카드문자(?, *) 사용 가능

${parm:-default}

;parm이 존재하지 않으면 default로 대체

${#parm}

;parm의 길이(문자수)를 반환

${parm%word}

;parm의 끝에서부터 word와 처음 일치하는 부분을

제거하고 나머지 반환

Page 42: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 42

Shell Programming(계속)

${parm%%word}

;parm의 끝에서부터 word와 마지막 일치하는 부분을

제거하고 나머지 반환

${parm#word}

;처음부터 word와 처음 일치하는 부분을 제거하고

나머지를 반환

${parm##word}

;처음부터 word와 마지막 일치하는 parm의 부분을

제거하고 나머지를 반환

Page 43: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 43

Shell Programming(계속)

* 예제 3 : 변수 확장 테스트

#!/bin/sh

p="/usr/X11R6/bin/startx"

unset p

a=$ {p:-"Variable p Not found" }

echo $a

p="/usr/X11R6/bin/startx"

a=$ {p:-"Variable parm Not found" }

echo $a

a=$ {#p }

echo $a

a=$ {p%/* }

echo $a

a=$ {p%%/* }

echo $a

Page 44: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 44

a=$ {p#*/ }

echo $a

a=$ {p##*/ }

echo $a

* 실행결과

Variable p Not found

/usr/X11R6/bin/startx

21

/usr/X11R6/bin

usr/X11R6/bin/startx

startx

Page 45: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 45

Shell Programming(계속)

* 조건 판단

-test 명령

if test -f test1 ;test1이 일반파일인가?

then

...

-[ 조건 ]

if [ -f test1 ] ;test명령과 동일기능

then

...

-if [ -f test1 ]; then ;두 문장을 한 라인에 표기

...

Page 46: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 46

Shell Programming(계속)

-문자열비교

[ string ] ;string이 빈 문자열이 아니라면 참

[ string1 = string2 ] ;두 문자열이 같다면 참

[ string1 != string2 ] ;두 문자열이 다르면 참

[ -n string ] ;문자열이 null이 아니라면 참

[ -z string ] ;문자열이 null이라면 참

Page 47: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 47

Shell Programming(계속)

-비교연산

[ expr1 -eq expr2 ] ;두 표현식 값이 같다면 참( EQual )

-ne ;같지 않다면 참(Not Equal)

-gt ;expr1 > expr2 이면 참(Greater Than)

-ge ;expr1 >= expr2 이면 참(Greater Equal)

-lt ;expr1 < expr2 이면 참(Less Than)

-le ;expr1 <= expr2 이면 참(Less Equal)

-논리연산

[ ! expr ] ;expr 이 참이면 거짓, 거짓이면 참

[ expr1 -a expr2 ] ;expr1 AND expr2

[ expr1 -o expr2 ] ;expr1 OR expr2

Page 48: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 48

Shell Programming(계속)

-파일조건I

[ -b file ] ;file이 블럭 디바이스면 참

[ -c file ] ;file이 문자 디바이스면 참.

[ -d file ] ;file이 디렉터리면 참

[ -e file ] ;file이 존재하면 참

[ -f file ] ;file이 존재하고 정규파일이면 참

[ -g file ] ;file이 set-group-id 파일이면 참

[ -h file ] ;file이 심볼릭 링크이면 참

[ -L file ] ;file이 심볼릭 링크이면 참

[ -k file ] ;file이 Sticky bit가 셋되어 있으면 참

[ -p file ] ;file이 이름붙은 파이프면 참

[ -r file ] ;현재 사용자가 읽을 수 있는 파일이면 참

[ -s file ] ;파일이 비어있지 않으면 참

Page 49: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 49

Shell Programming(계속)

-파일조건II

[ -S file ] ;소켓 디바이스이면 참

[ -t FD ] ;FD가 열려진 터미널이면 참

[ -u file ] ;file 이 set-user-id 파일이면 참

[ -w file ] ;사용자가 기록할 수 있는 파일이면 참

[ -x file ] ;사용자가 실행할 수 있는 파일이면 참

[ -O file ] ;file의 소유자가 현재 사용자이면 참

[ -G file ] ;file의 그룹이 현 사용자그룹과 같으면 참

[ file1 -nt file2 ] ;file1이 file2보다 새로운 파일이면 참

[ file1 -ot file2 ] ;file1이 file2 보다 오래된 파일이면 참

[ file1 -ef file2 ] ;file1이 file2의 하드링크 파일이면 참

Page 50: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 50

Shell Programming(계속)

* if 구문

-조건을 판단하여 주어진 문장을 수행

-단일 if문 형식

if [ 조건 ]

then

문장1

……

fi

Page 51: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 51

Shell Programming(계속)

-if~elif 문 형식

if [ 조건 ]

then

문장

else

문장

fi

Page 52: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 52

Shell Programming(계속)

* 예제 4 : if-else 문

-해당파일 존재하면 cat, 그렇지 않으면…..

echo "Input filename :" ; read tmpfile

if [ -f $tmpfile ]

then

echo $tmpfile is exist!!

cat $tmpfile

else

echo $tmpfile is not exist!!

fi

Page 53: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 53

Shell Programming(계속)

* 예제 5 : 숫자 크기 비교

echo "Input number :" ; read num

if [ $num -eq 15 ]

then

echo Same!!

elif [ $num -gt 15 ]

then

echo Big!!

else

echo Small!!

fi

Page 54: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 54

Shell Programming(계속)

* case 문

-패턴에는 * 문자, 즉 와일드카드를 사용가능

-형식

case 변수 in

패턴 [ | 패턴 ] ... ) 문장 ;;

패턴 [ | 패턴 ] ... ) 문장 ;;

....

* ) 문장 ;;

esac

Page 55: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 55

Shell Programming(계속)

* 예제 6 : 개인 정보의 항목 선택

echo "**** my profile ****"

echo 1\) Birth Day.

echo 2\) Address.

echo 3\) Work.

echo Q\) Quit.

read select

case $select in

1) echo "09.18";;

2) echo "Kyounggi-do";;

3) echo "I\'m computer programmer...";;

Q|q) echo "See you again!";;

*) echo "Select error...";;

esac

Page 56: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 56

Shell Programming(계속)

* for 문

-for 문은 지정된 범위안에서 루프를 수행

-형식

for 변수 in 값1 값2 ...

do

문장

done

-루프를 돌 때마다 변수 값은 in 뒤의 값으로 대체

Page 57: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 57

Shell Programming(계속)

* 예제 7 :

for friend in Kim Park Song David

do

echo $friend is my friend.

done

* 예제 8 :

-현 디렉터리에서 히든파일 만을 출력

for file in $(ls -a | grep "^.")

do

echo "$file is Hidden File"

done

Page 58: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 58

Shell Programming(계속)

* 예제 9 :

-chap3.txt, chap4.txt, chap5.txt 파일을

Books.txt 라는 파일에 붙여넣음

for file in $(ls chap[345].txt)

do

echo "--- $file ---" >> Books.txt

cat $file >> Books.txt

done

Page 59: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 59

Shell Programming(계속)

* while 문

-for 명령은 횟수 지정하여 루프수행에 문제있음

-while 문은 실행횟수가 지정되지 않았을 때 편리

-형식

while 조건문

do

문장

done

Page 60: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 60

Shell Programming(계속)

* 예제 10 : while 문 테스트

echo "**** my profile ****"

echo 1\) Birth Day.

echo 2\) Address.

echo 3\) Work.

echo Q\) Quit.

select=0

while [ \( $select != Q \) -a \( $select != q \) ]

do

read select

case $select in

1) echo "09.18 (10.01 of the lunar)";;

2) echo "Kyounggi-do";;

3) echo "I\'m computer programmer...";;

Q|q) echo "See you again!";;

Page 61: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 61

*) echo "Select error...";;

esac

done

Page 62: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 62

Shell Programming(계속)

* until 문

-while문과 동일한 효과를 내지만 조건이 반대임

-즉, while문은 조건이 참인동안 루프를 수행하지만

until은 조건이 거짓일 동안 루프를 수행

-형식

until 조건문

do

문장

done

Page 63: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 63

Shell Programming(계속)

* 예제 11 : until 문 테스트

echo "**** my profile ****"

echo 1\) Birth Day.

echo 2\) Address.

echo 3\) Work.

echo Q\) Quit.

select=0

until [ \( $select = Q \) -o \( $select = q \) ]

do

read select

case $select in

1) echo "09.18 (10.01 of the lunar)";;

2) echo "Kyounggi-do";;

3) echo "I\'m computer programmer...";;

Q|q) echo "See you again!";;

Page 64: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 64

*) echo "Select error...";;

esac

done

Page 65: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 65

Shell Programming(계속)

* select 문

-항목 리스트를 출력하고 선택된 것을 반환하는 문

-select의 루프내에서 자동으로 루프 탈출 불능

-따라서, break 문을 사용하여 루프 탈출하여야 함

-목록에 대해 숫자머리 표현후, 숫자입력을 요구함

-형식

select var in Linux Windows DOS UNIX Quit

do

....

done

Page 66: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 66

Shell Programming(계속)

* 예제 12 : 간단한 퀴즈

echo "Our Subject?"

select var in Linux Windows DOS UNIX Quit

do

if [ $var = Linux ]; then

echo "Yes, Our subject is Linux."

elif [ $var = Quit ]; then

echo "Quitting…. "

break

else

echo "No, Try Again!!"

fi

done

Page 67: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 67

Shell Programming(계속)

* 함수(function)

-독립적으로 $#, $*, $0 등의 인자변수 사용가능

-즉, 함수내의 $#과 본체의 $#은 다를 수 있음!!

-함수정의

함수명()

{

문장

return 값

}

- 함수 호출

함수명 인자1, 인자2, ...

Page 68: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 68

Shell Programming(계속)

* 예제 13 : 함수 테스트

func() ;함수 정의

{

echo ------ this is func --------

echo "This Script Executable File : $0"

echo "Argument Count : $#"

echo "Process ID : $$"

echo "Argument List \$* : $*"

echo "Argument List \$@ : $@"

echo "Argument 1 : $1"

echo "Argument 2 : $2"

echo "Argument 3 : $3"

}

Page 69: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 69

Shell Programming(계속)

echo ------ this is main --------

echo "This Script Executable File : $0"

echo "Argument Count : $#"

echo "Process ID : $$"

echo "Argument List \$* : $*"

echo "Argument List \$@ : $@"

echo "Argument 1 : $1"

echo "Argument 2 : $2"

echo "Argument 3 : $3"

echo "Argument 4 : $4"

func aa bb cc ;함수 호출

Page 70: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 70

Shell Programming(계속)

* break

-제어문이나 조건문의 루프를 빠져 나갈때 사용

-예)

while [ $a -lt 10 ]

do

if [ $a -eq 5 ]; then

break

fi

done

Page 71: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 71

Shell Programming(계속)

* continue

-제어문이나 조건문의 처음으로 돌아가서 다시 수행

-예)

for friend in Kim Park Song

do

if [ $friend = Park ]; then

continue

fi

echo $friend is my friend.

done

Page 72: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 72

Shell Programming(계속)

* echo

-이후의 문장을 출력하고, 자동으로 개행문자 삽입

* unset

-변수나 함수를 제거

* read

-콘솔로부터 데이터를 읽어들임

예) read kor eng mat

Page 73: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 73

Shell Programming(계속)

* eval

-인자의 실제 값을 구하는데 사용

-예)

foo=10

x=foo

y='$'$x

echo $y ;$foo가 출력

-예)

foo=10

x=foo

eval y='$'$x

echo $y ;$foo의 값 즉 10 이 출력

Page 74: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 74

Shell Programming(계속)

* exit n

-현재 쉘스크립트를 종료하며, n 값을 리턴함

* expr

-표현식의 값을 계산 ( x=`expr 1 + 2` )

-expr보다는 $((계산식)) 구문을 많이 사용

* printf

-C 언어의 printf 함수와 흡사

-형식 : printf "Format String" arg1 arg2 ...

Page 75: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 75

Shell Programming(계속)

* return

-쉘 함수에서 값을 반환할 때 사용

-0은 성공을, 1~125까지는 에러코드를 의미

Page 76: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 76

Shell Programming(계속)

* set

-쉘 내부에서 매개 인자를 설정

-set의 인자로 쓰인 문자열은 공백에 의해 구분되어

$1 부터 차례대로 대입

-예)

#!/bin/sh

echo $# ;매개인자 개수 출력, 0

set $(ls) ;매개인자 설정

echo $# ;ls 명령에 의한 인자개수, n

Page 77: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 77

Shell Programming(계속)

* shift

-쉘의 인자를 한자리씩 아래로(n -> 1로) 이동

-예)

# vi myscript

echo $1

shift

echo $1

shift 5

echo $1

# ./myscript 1 2 3 4 5 6 7 8 9 0

1

2

7

Page 78: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 78

실습과제

[실습1] 숫자맞추기 게임

mynum=$1

while true

do

echo "Guess my Number : " ; read num

if [ $mynum -eq $num ] ; then

echo "Good!!!!!!"

break

elif [ $num -lt $mynum ] ; then

echo "smaller!!"

else

echo "bigger!!"

fi

done

Page 79: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 79

실습과제(계속)

[실습2] 구구단

for dan in 2 3 4 5 6 7 8 9

do

echo

echo "= $dan DAN ="

for gu in 2 3 4 5 6 7 8 9

do

echo "$dan X $gu = $(($dan*$gu))"

done

done

Page 80: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 80

실습과제(계속)

[실습3] 성적처리

-국어, 영어, 수학 점수를 입력받아서,

-총점 및 평균을 계산하여 출력하고,

-평균에 따라 학점을 부여(if문으로, 그리고 case문을 사용)

-단, 학점은 평균이 90 이상이면 A, 80 점대는 B,

70 점대는 C, 60 점대는 D, 나머지는 F로 부여

echo "Input : " ; read kor eng mat

echo "KOR, ENG, MAT : $kor $eng $mat"

tot=$(( $kor + $eng + $mat ))

avg=$(( $tot / 3 ))

echo "TOTAL : $tot"

echo "AVERAGE : $avg"

Page 81: 제04강 임베디드리눅스 명령 II

임베디드응용및실습 임베디드리눅스 명령 II 81

tmp=$(( $avg / 10 ))

hak=""

case $tmp in

9|10) hak="A";;

8) hak="B";;

7) hak="C";;

6) hak="D";;

*) hak="F";;

esac

echo "HakJeom : $hak"