Download - 제04강 임베디드리눅스 명령 II
임베디드응용및실습 임베디드리눅스 명령 II 1
제04강
임베디드리눅스 명령 II
Visual Editor
실습과제
(생략)Shell 및 사용자 환경 설정
실습과제
(생략)Shell Programming
실습과제
임베디드응용및실습 임베디드리눅스 명령 II 2
Visual Editor
-UNIX/LINUX의 표준 화면편집기
-X 윈도우환경 및 컨솔환경에서 동일하게 사용
-RedHat Linux에서는 vim(improved vi)을 제공
* 도움말
# vim tutor
* 세가지 모드
-명령모드 : 삭제, 복사, 붙이기 등
-입력모드 : 글자 입력
-실행모드 : 명령실행
;파일저장 및 읽기, 종료, 외부명령 실행
임베디드응용및실습 임베디드리눅스 명령 II 3
Visual Editor(계속)
임베디드응용및실습 임베디드리눅스 명령 II 4
Visual Editor(계속)
* vi 시작
-기본적으로 명령모드로 진입
# vi <파일명>
# vi
# vi file (file2, file3···) ;기존 파일 편집
# vi +9 file ;9번 라인을 중심으로 표시
# vi + file ;끝줄을 중심으로 표시
# vi -R file ;읽기전용으로 vi 실행
임베디드응용및실습 임베디드리눅스 명령 II 5
Visual Editor(계속)
* 입력 모드
- i(insert), a(append), o(open)
i : cursor의 왼쪽에 text 입력
I : cursor가 있는 라인의 시작에서 text 입력
a : cursor의 오른쪽에 text 입력
A : cursor가 있는 라인의 끝에서 text 입력
o : 커서가 있는 라인 아래에 새라인 삽입후 입력
O : 커서가 있는 라인 위에 새 라인 삽입후 입력
임베디드응용및실습 임베디드리눅스 명령 II 6
Visual Editor(계속)
* 명령모드
-초기 vi 실행시 기본 모드
-입력모드에서 <ESC>키 누르면 진입
* 표시영역 이동
<ctrl>-f ;내용을 화면 크기만큼 위로 이동
<ctrl>-b ;화면 크기만큼 아래로 이동
<ctrl>-d ;화면 크기의 1/2만큼 위로 이동
<ctrl>-u ;화면 크기의 1/2만큼 아래로 이동
<ctrl>-e ;한 line씩 위로 이동
<ctrl>-y ;한 line씩 아래로 이동
임베디드응용및실습 임베디드리눅스 명령 II 7
Visual Editor(계속)
* Cursor 이동
h(좌), j(하), k(상), l(우)
;화살표 방향키와 동일하게 이동(한 문자)
H ;현재 화면의 첫 line, 첫 칼럼으로 이동
M ;현재 화면의 중간 line, 첫 칼럼으로 이동
L ;현재 화면의 마지막 line, 첫 칼럼으로 이동
W, w ;현재 위치에서 오른쪽으로 한 단어씩 이동
B, b ;왼쪽으로 한 단어씩 이동
;w, b에서 특수문자는 한 단어로 인식
;W, B에서 space로 단어 구분
임베디드응용및실습 임베디드리눅스 명령 II 8
Visual Editor(계속)
^(hat) ;cursor가 위치한 line의 첫 문자로 이동
0(zero) ;현 라인의 첫 칼럼으로 이동
$ ;현 라인의 끝으로 이동
9G ;9번째 라인으로 이동
G ;파일의 마지막 라인으로 이동
+ ;다음 라인의 첫 문자로 이동
- ;앞 라인의 첫 문자로 이동
) ;다음 문장으로 cursor 이동
( ;이전 문장으로 cursor 이동
} ;다음 절(문단)로 cursor 이동
{ ;이전 절(문단)로 cursor 이동
임베디드응용및실습 임베디드리눅스 명령 II 9
Visual Editor(계속)
* 문자열 검색
/<str> ;순방향으로 검색하여 첫번째 문자열로
cursor 이동 (대·소문자 구별)
/<ENTER> ;순방향으로 직전 검색을 연속 검색
?<str> ;역방향으로 문자열 검색
?<ENTER> ;역방향으로 직전 검색을 연속 검색
n ;검색후 순방향의 다음 문자열로 이동
N ;검색후 역방향의 문자열로 이동
임베디드응용및실습 임베디드리눅스 명령 II 10
Visual Editor(계속)
* 삭제
x ;cursor가 위치하고 있는 한 문자 삭제
X ;cursor의 위치 앞 한 문자 삭제
dw ;cursor 위치에서 오른쪽 한 단어 삭제
db ;cursor 위치에서 왼쪽의 한 단어 삭제
D ;cursor 위치부터 그 line 끝까지 삭제
dd ;cursor가 위치하는 line 삭제
9dd ;cursor가 위치하는 line포함 9개 라인 삭제
임베디드응용및실습 임베디드리눅스 명령 II 11
Visual Editor(계속)
* 문자, 단어, line 치환
r ;cursor 위치의 한 문자만 치환
R ;cursor 위치부터 오른쪽으로 여러문자 치환
;<ESC> key로 치환 중지
~(tilde) ;대소문자치환을 한 문자씩
cw ;현 커서의 단어 단위로 치환
cc ;현 라인을 치환(현라인 제거)
C ;현 라인의 커서이후 치환
임베디드응용및실습 임베디드리눅스 명령 II 12
Visual Editor(계속)
* 명령 취소 및 반복
u ;직전 행한 하나의 명령의 결과를 취소
U ;그 라인에서 행한 모든 명령을 취소하고
file 복구
<ctrl>-r ;직전 취소한 것 되돌리기
. ;직전에 수행한 명령을 반복
임베디드응용및실습 임베디드리눅스 명령 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을 결합
임베디드응용및실습 임베디드리눅스 명령 II 14
Visual Editor(계속)
* 실행모드
-명령모드에서 ':'키 누르면 진입
-하단 상태표시줄에 실행명령입력후 <enter>
-명령 수행후 명령모드로 자동 복귀
-이동
:9 ;file의 9번째 line으로 이동
임베디드응용및실습 임베디드리눅스 명령 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로
모두 치환(대·소문자 구별)
임베디드응용및실습 임베디드리눅스 명령 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로 저장
임베디드응용및실습 임베디드리눅스 명령 II 17
Visual Editor(계속)
* marking : 특정라인을 추후 참조하고자
-문자(a-z, A-Z)수 만큼 마킹 가능
-마킹 위치로 이동 : '<문자>
예) a로 마킹한다고 가정
-마킹위한 라인으로 이동 후, :ka<enter>
-임의 위치로 커서 이동
-마킹 위치 이동하려면, 'a를 누름
임베디드응용및실습 임베디드리눅스 명령 II 18
Visual Editor(계속)
* 파일의 일부(블록)를 파일로 저장
-블록의 시작라인에 마킹
-블록의 끝라인으로 커서 이동
-:'<문자>, w! file
예) p로 마킹하고, tmp파일로 저장한다고 가정
-저장할 블록의 첫 라인으로 이동 후, :kp<enter>
-저장할 블록의 끝 라인으로 커서 이동 후,
:'p, w! tmp<enter>
임베디드응용및실습 임베디드리눅스 명령 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로 복귀
임베디드응용및실습 임베디드리눅스 명령 II 20
실습과제
[실습 1] 문서작성을 통해 중요 키 사용법 숙지
-문서작성 및 저장
-특정 문자열 탐색
-특정 문자열을 다른 문자열로 대체
-블록 삭제, 다른 곳에 붙이기
-블록 복사, 다른 곳에 붙이기
-특정 블록을 임의파일로 저장
-특정 파일을 임의 위치로 삽입
임베디드응용및실습 임베디드리눅스 명령 II 21
Shell 및 사용자 환경 설정
* 쉘(Shell)
-명령어 해석기
-시스템과 사용자간의 대화창구
* Shell의 기능
-내부명령, 외부명령 실행 명령프롬프트
-여러 명령 연결 : 파이프(|)
-입/출력 리다이렉션 ( >,<,>>,<<,2> )
-특수문자 해석 및 치환, 명령어 치환
-지역/환경변수 관리
-스크립트 프로그래밍 언어 제공(자동화 작업)
임베디드응용및실습 임베디드리눅스 명령 II 22
Shell 및 사용자 환경 설정(계속)
* 쉘 종류
-Bourne 쉘, Bourne Again Shell (bash)($)
-C 쉘, 확장 C 쉘(tcsh)(%)
-Korn Shell, V Shell…
-각 쉘별 기본 기능 및 작동법은 유사함
* 쉘간 변경
$ tcsh ;tcsh 쉘로 전환
% ;tcsh prompt
% exit ;tcsh을 종료(bash로 복귀)
$ ;bash prompt
임베디드응용및실습 임베디드리눅스 명령 II 23
Shell 및 사용자 환경 설정(계속)
-기본 Shell :GNU Bourne Again Shell(/bin/bash)
C 문법을 많이 도용
* bash의 환경설정 파일
-모든 사용자 공통의 환경설정 파일
: /etc/profile, /etc/bashrc
-사용자별 환경설정 파일
: .bash_profile, .bashrc, .bash_logout
원본파일 /etc/skel/ 디렉터리에 존재
사용자 추가마다 각 사용자의 홈디렉터리에 복사
임베디드응용및실습 임베디드리눅스 명령 II 24
Shell 및 사용자 환경 설정(계속)
* 환경설정 파일 인식 순서
/etc/profile ->
~/.bash_profile ->
~/.bashrc ->
/etc/bashrc
임베디드응용및실습 임베디드리눅스 명령 II 25
Shell 및 사용자 환경 설정(계속)
* echo
-echo는 뒤에 나오는 문자열 출력
# echo SHELL
# echo Hello, Everyone!!
* 메타 문자
-Shell이 해석하는 특수한 기능을 가진 문자 : '$'
# echo $SHELL
;'$'는 뒷단어를 변수로 인식, 그 내용 출력
-메타문자 해석 금지 : '\' 앞 세움
# echo \$SHELL ;'$SHELL' 문자열 출력
임베디드응용및실습 임베디드리눅스 명령 II 26
Shell 및 사용자 환경 설정(계속)
* 패스 설정
-현재 path 설정 확인
# echo $PATH
-PATH에 디렉터리 추가(':'으로 구분)
-/etc/profile편집후, 재부팅 ;전체사용자 적용
-~/.bash_profile 편집후, 다시 로그인
;특정 사용자에게 적용
-현재 로그인에서만 임시 추가(로그아웃시 소멸)
# echo $PATH
# PATH=$PATH:<추가할 디렉터리>
임베디드응용및실습 임베디드리눅스 명령 II 27
Shell 및 사용자 환경 설정(계속)
* 에일리어스(별칭)
-명령에 대한 재명명 혹은 단축형
-개인별 alias 설정정보 확인
# alias <enter>
-별칭 등록
/etc/bashrc 편집 ;전체사용자적용
~/.bashrc 편집 ;특정사용자적용
예) alias lsa='ls -a' 추가
임베디드응용및실습 임베디드리눅스 명령 II 28
Shell 및 사용자 환경 설정(계속)
* 사용자 프롬프트 변경
-/etc/bashrc 편집
PS1="[\u@\h \W] \\$
=> PS1="[\u@\h \$PWD] \\$ ;절대경로 표시
\u : 사용자명
\h : 호스트명
\W : 현 위치
\$PWD : 작업디렉터리의 전체경로
임베디드응용및실습 임베디드리눅스 명령 II 29
Shell 및 사용자 환경 설정(계속)
* 로그아웃시의 실행
~/.bash_logout 편집
임베디드응용및실습 임베디드리눅스 명령 II 30
실습과제
[실습 1] 쉘 변경
-bash, csh, tcsh 제공
# csh
~...]#
~...]# exit
[실습 2] PATH 추가
-실행파일 mytest를 어디서나 실행가능토록
* 특정 사용자 임시
* 특정 사용자 항시
* 모든 사용자 항시
임베디드응용및실습 임베디드리눅스 명령 II 31
실습과제(계속)
[실습 3] 프롬프트(PS1) 변경
PS1="[\u@\h \$PWD] \\$ "
[실습 4] Alias(별칭) 설정
-이미 친숙한 DOS 명령처럼
예) alias dir='ls -al'
alias cls='clear'
임베디드응용및실습 임베디드리눅스 명령 II 32
Shell Programming
* 쉘 스크립트(Shell Script) 작성
# vi test
* 실행방법
-shell을 통하여
# sh test
-실행파일화하여
# chmod 777 test
# ./test
임베디드응용및실습 임베디드리눅스 명령 II 33
Shell Programming
* 쉘 변수의 특징
-미리 선언할 필요 없음
-데이터형이 없음
-대소문자를 구별함
-기본적으로 데이터를 문자열로 저장함
(수치를 대입해도 문자열로 저장)
연산시 수치로 자동변환하여 계산후 문자열로 저장
-쉘변수에 값을 대입할 때는 "$"를 사용하지 않음
VAR=12345
-쉘변수의 값 참조는 변수명 앞에 "$"를 붙여 참조
ECHO $VAR
임베디드응용및실습 임베디드리눅스 명령 II 34
Shell Programming(계속)
* 환경변수
-쉘을 기동하면 기본적으로 설정되어 있는 변수
$0 ;실행된 쉘 스크립트 이름
$# ;스크립트에 넘겨진 인자수
$$ ;쉘 스크립트의 프로세스 ID
* 인자 변수
-쉘 스크립트에 넘겨주는 인자 정보를 갖는 변수
$1,…, $n ;넘겨진 인자들
$* ;인자들을 모아놓은 문자열
$@ ;$*과 동일
임베디드응용및실습 임베디드리눅스 명령 II 35
Shell Programming(계속)
* 일반 변수
-특별한 제약없이 대소문자 구분하여 사용
-환경 변수로 지정된 변수명은 피할 것
임베디드응용및실습 임베디드리눅스 명령 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"
임베디드응용및실습 임베디드리눅스 명령 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
임베디드응용및실습 임베디드리눅스 명령 II 38
Shell Programming(계속)
* expr
예) expr 10 \* 5`-연산 기호 유형
\* : 곱하기, \/ : 나누기, % : 나머지
+ : 더하기, - : 빼기,
=, \>, \<, \<=, \>=, != : 비교 연산자
\& : AND 연산자, \| : OR 연산자
\(, \): 괄호,
length <str> : <str>의 길이 반환
임베디드응용및실습 임베디드리눅스 명령 II 39
Shell Programming(계속)
* 산술식
-형식 : 변수 = $((산술식))
-산술식 내에 변수($1, $a와 같은) 사용 가능
예) var=$(($kor+$eng+$mat))
-산술식 내에 숫자가 아닌 문자열, 또는 문자열이
담겨있는 변수는 계산에서 제외됨을 유의
임베디드응용및실습 임베디드리눅스 명령 II 40
Shell Programming(계속)
* 예제 2 : expr 및 산술식 테스트
var1=`expr 5 \* 10` echo $var1
var2=$((5*10))
Echo $var2
echo `expr length Programming!`
임베디드응용및실습 임베디드리눅스 명령 II 41
Shell Programming(계속)
* 매개변수 확장
-변수의 값을 문자열 등으로 대체 및 조작을 의미
-word에는 와일드 카드문자(?, *) 사용 가능
${parm:-default}
;parm이 존재하지 않으면 default로 대체
${#parm}
;parm의 길이(문자수)를 반환
${parm%word}
;parm의 끝에서부터 word와 처음 일치하는 부분을
제거하고 나머지 반환
임베디드응용및실습 임베디드리눅스 명령 II 42
Shell Programming(계속)
${parm%%word}
;parm의 끝에서부터 word와 마지막 일치하는 부분을
제거하고 나머지 반환
${parm#word}
;처음부터 word와 처음 일치하는 부분을 제거하고
나머지를 반환
${parm##word}
;처음부터 word와 마지막 일치하는 parm의 부분을
제거하고 나머지를 반환
임베디드응용및실습 임베디드리눅스 명령 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
임베디드응용및실습 임베디드리눅스 명령 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
임베디드응용및실습 임베디드리눅스 명령 II 45
Shell Programming(계속)
* 조건 판단
-test 명령
if test -f test1 ;test1이 일반파일인가?
then
...
-[ 조건 ]
if [ -f test1 ] ;test명령과 동일기능
then
...
-if [ -f test1 ]; then ;두 문장을 한 라인에 표기
...
임베디드응용및실습 임베디드리눅스 명령 II 46
Shell Programming(계속)
-문자열비교
[ string ] ;string이 빈 문자열이 아니라면 참
[ string1 = string2 ] ;두 문자열이 같다면 참
[ string1 != string2 ] ;두 문자열이 다르면 참
[ -n string ] ;문자열이 null이 아니라면 참
[ -z string ] ;문자열이 null이라면 참
임베디드응용및실습 임베디드리눅스 명령 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
임베디드응용및실습 임베디드리눅스 명령 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 ] ;파일이 비어있지 않으면 참
임베디드응용및실습 임베디드리눅스 명령 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의 하드링크 파일이면 참
임베디드응용및실습 임베디드리눅스 명령 II 50
Shell Programming(계속)
* if 구문
-조건을 판단하여 주어진 문장을 수행
-단일 if문 형식
if [ 조건 ]
then
문장1
……
fi
임베디드응용및실습 임베디드리눅스 명령 II 51
Shell Programming(계속)
-if~elif 문 형식
if [ 조건 ]
then
문장
else
문장
fi
임베디드응용및실습 임베디드리눅스 명령 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
임베디드응용및실습 임베디드리눅스 명령 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
임베디드응용및실습 임베디드리눅스 명령 II 54
Shell Programming(계속)
* case 문
-패턴에는 * 문자, 즉 와일드카드를 사용가능
-형식
case 변수 in
패턴 [ | 패턴 ] ... ) 문장 ;;
패턴 [ | 패턴 ] ... ) 문장 ;;
....
* ) 문장 ;;
esac
임베디드응용및실습 임베디드리눅스 명령 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
임베디드응용및실습 임베디드리눅스 명령 II 56
Shell Programming(계속)
* for 문
-for 문은 지정된 범위안에서 루프를 수행
-형식
for 변수 in 값1 값2 ...
do
문장
done
-루프를 돌 때마다 변수 값은 in 뒤의 값으로 대체
임베디드응용및실습 임베디드리눅스 명령 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
임베디드응용및실습 임베디드리눅스 명령 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
임베디드응용및실습 임베디드리눅스 명령 II 59
Shell Programming(계속)
* while 문
-for 명령은 횟수 지정하여 루프수행에 문제있음
-while 문은 실행횟수가 지정되지 않았을 때 편리
-형식
while 조건문
do
문장
done
임베디드응용및실습 임베디드리눅스 명령 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!";;
임베디드응용및실습 임베디드리눅스 명령 II 61
*) echo "Select error...";;
esac
done
임베디드응용및실습 임베디드리눅스 명령 II 62
Shell Programming(계속)
* until 문
-while문과 동일한 효과를 내지만 조건이 반대임
-즉, while문은 조건이 참인동안 루프를 수행하지만
until은 조건이 거짓일 동안 루프를 수행
-형식
until 조건문
do
문장
done
임베디드응용및실습 임베디드리눅스 명령 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!";;
임베디드응용및실습 임베디드리눅스 명령 II 64
*) echo "Select error...";;
esac
done
임베디드응용및실습 임베디드리눅스 명령 II 65
Shell Programming(계속)
* select 문
-항목 리스트를 출력하고 선택된 것을 반환하는 문
-select의 루프내에서 자동으로 루프 탈출 불능
-따라서, break 문을 사용하여 루프 탈출하여야 함
-목록에 대해 숫자머리 표현후, 숫자입력을 요구함
-형식
select var in Linux Windows DOS UNIX Quit
do
....
done
임베디드응용및실습 임베디드리눅스 명령 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
임베디드응용및실습 임베디드리눅스 명령 II 67
Shell Programming(계속)
* 함수(function)
-독립적으로 $#, $*, $0 등의 인자변수 사용가능
-즉, 함수내의 $#과 본체의 $#은 다를 수 있음!!
-함수정의
함수명()
{
문장
return 값
}
- 함수 호출
함수명 인자1, 인자2, ...
임베디드응용및실습 임베디드리눅스 명령 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"
}
임베디드응용및실습 임베디드리눅스 명령 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 ;함수 호출
임베디드응용및실습 임베디드리눅스 명령 II 70
Shell Programming(계속)
* break
-제어문이나 조건문의 루프를 빠져 나갈때 사용
-예)
while [ $a -lt 10 ]
do
if [ $a -eq 5 ]; then
break
fi
done
임베디드응용및실습 임베디드리눅스 명령 II 71
Shell Programming(계속)
* continue
-제어문이나 조건문의 처음으로 돌아가서 다시 수행
-예)
for friend in Kim Park Song
do
if [ $friend = Park ]; then
continue
fi
echo $friend is my friend.
done
임베디드응용및실습 임베디드리눅스 명령 II 72
Shell Programming(계속)
* echo
-이후의 문장을 출력하고, 자동으로 개행문자 삽입
* unset
-변수나 함수를 제거
* read
-콘솔로부터 데이터를 읽어들임
예) read kor eng mat
임베디드응용및실습 임베디드리눅스 명령 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 이 출력
임베디드응용및실습 임베디드리눅스 명령 II 74
Shell Programming(계속)
* exit n
-현재 쉘스크립트를 종료하며, n 값을 리턴함
* expr
-표현식의 값을 계산 ( x=`expr 1 + 2` )
-expr보다는 $((계산식)) 구문을 많이 사용
* printf
-C 언어의 printf 함수와 흡사
-형식 : printf "Format String" arg1 arg2 ...
임베디드응용및실습 임베디드리눅스 명령 II 75
Shell Programming(계속)
* return
-쉘 함수에서 값을 반환할 때 사용
-0은 성공을, 1~125까지는 에러코드를 의미
임베디드응용및실습 임베디드리눅스 명령 II 76
Shell Programming(계속)
* set
-쉘 내부에서 매개 인자를 설정
-set의 인자로 쓰인 문자열은 공백에 의해 구분되어
$1 부터 차례대로 대입
-예)
#!/bin/sh
echo $# ;매개인자 개수 출력, 0
set $(ls) ;매개인자 설정
echo $# ;ls 명령에 의한 인자개수, n
임베디드응용및실습 임베디드리눅스 명령 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
임베디드응용및실습 임베디드리눅스 명령 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
임베디드응용및실습 임베디드리눅스 명령 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
임베디드응용및실습 임베디드리눅스 명령 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"
임베디드응용및실습 임베디드리눅스 명령 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"