블로그 이미지
progh2
지루한 것에서 벗어나 재미난 것 속으로 풍덩~☆

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

Recent Post

Recent Comment

Archive

expr - 인수를 수식으로 평가.
| & = > < >= < <= != + - * / % 등을 사용 가능하나 $((..))를 더 많이 쓴다.
x='expr $x + 1'
printf - 최신 쉘에서만 유용한 약간 c보다는 제한있는 형식화된 출력
이드케이프 시퀀스
\ 역슬래시 문자
a 경고(벨이나 경고음)
? 백스페이스 문자
f 폼피드 문자

새 줄 문자

개행문자
탭문자
v 수직 탭문자
변환지정자(conversion specifier)
%d 10진수 툴력
%c 문자 출력
%s 스트링 출력
%% %%문자 출력
$ printf "%s %d %s
" "Hi There" 15 people
Hi There 15 people
return- 함수의 반환 지정. 생략하면 마지막 명령의 종료코드를 반환

set - 쉘을 위한 파라미터 변수 설정
[CODE]#!/bin/sh # set.sh echo the date is $(date) set $(date) echo The month is $2 exit 0[/CODE]
shift - 모든 파라미터 변수를 한 단계 아래로 이동.
스크립트가 10개 이상의 파라미터를 요구할 때 10번째 이상의 파라미터를 이용하기 위해 shift가 필요하게 된다.
[CODE]#!/bin/sh while [ "$1" != "" ]; do echo "$1" shift done exit 0[/CODE]
trap - 시그널(signal) 받아들일 때 수행동작 지정
흔한 용도는 인터럽트가 발생할 때 스크립트를 정리하는 것이다. trap 명령에는 수행할 동작과 가로챌 시그널 이름이 전달된다.
시그널에 익숙하지 않다면 프로그램에 비동기적으로 전달되는 이벤트로 생각할 수 있다. 기본적으로 이것은 대개 프로그램이 종료하게 된다
trap command signal
trap 조건을 기본값으로 재설정 하기 위해서는 단순히 명령을 - 로 지정하면 된다. 시그널을 무시하기 위해서는 명령을 비 스트링 ' '으로 설정한다.
시그널 - 설명
HUP(1) - Hang up. 일반적으로 터미널이 회선에서 사라지거나 사용자가 로그아웃 할 때 전달된다.
INT(1) - Interrupt. 일반적으로 키를 눌러 전달한다.
QUIT(3) - Quit. 일반적으로 키를 눌러 전달한다.
ABRT(6) - Abort. 일반적으로 몇 가지 심각한 실행 에러의 경우에 전달.
ALRM(14) - Alarm. 일반적으로 시간 경괄르 다루기 위해 사용.
TERM(15) - Terminate. 시스템이 종료될 때 시스템에 의해 전달

[CODE]#!/bin/sh trap "rm -f /tmp/my_tmp_file_$$" INT echo "creating file /tmp/my_tmp_file_"$$ date > /tmp/my_tmp_file_$$ echo "press interrup (CTRL-C) to interrup ..." while [ -f /tmp/my_tmp_file_$$ ]; do echo "File exists" sleep 1 done echo "The file no longer exists" trap - INT echo "creating file /tmp/my_tmp_file_"$$ date > /tmp/my_tmp_file_$$ echo "press interrup (control-C) to interrupt ..." while [ -f /tmp/my_tmp_file_$$ ]; do echo "File exists" sleep 1 done echo "We never get here" exit 0[/CODE]
unset - 환경으로부터 변수나 함수 제거. 그러나 쉘 자체에 의해 정의된 읽기 전용 변수를 대상으로 할 수는 없다.
명령 실행 - 명령을 실행하고 명령의 출력 결과를 저장할 때 사용
$(command) 또는 `command`
변수 확장에 대해 보호하기 위해 앞의 쉘인용에서 명령실행의 "오래된 형식"으로 역 따옴표 `` 가 쓰였다. 이 형식은 매우 이식성 있어야 하는 쉘 스크립트에서만 사용하기 바란다.

표준 출력에서 명령의 출력 결과인 파라미터들을 변환하려고 하고, 이것을 프로그램의 인수로 사용하고자 하는 경우가 있다면, 명령 xargs를 사용하면 된다.
[CODE]#!/bin/sh echo "The current users are $(who)" result=$(ls | xargs cat) echo $result exit 0[/CODE]
산술확장 - expr명령은 처리하기 위해 새로운 쉘을 호출해야 하므로 느리다. 따라서 expr보다 나은 $((...)) 확장을 많이 사용한다.
[CODE]#!/bin/sh x=0 while [ "$x" -ne 10 ] ; do echo $x x=$(($x+1)) done exit 0[/CODE]
파라미터 확장 - 스트링을 파라이터 값 내에서의 대체를 하는 등의 필터
[CODE]#!/bin/sh # 각 루프에서 i의 값은 실제 파일 이름을 제공하기 위해 ${i}로 대체. for i in 1 2 ; do my_secret_process ${i}_tmp done[/CODE]
흔히 사용되는 파라미터 확장들
${param:-default} param이 널이면 이것을 default값으로 제공 (param값은 불변)
${param:+default} param이 존재하고 널이 아니면 default를 반환(param값은 불변)
${param:=default} param이 널이면 default값을 대입(param값 변함)
${#param} param의 길이를 제공
${param%word} 끝에서 word에 일치하는 param의 가장 작은 부분을 제거하고, 나머지를 반환한다.
${param%%word} 끝에서 word에 일치하는 param의 가장 긴 부분을 제거하고, 나머지를 반환한다.
${param#word} 처음부터 word에 일치하는 param의 가장 작은 부분을 제거하고, 나머지를 반환한다.
${param##word} 처음부터 word에 일치하는 param의 가장 긴 부분을 제거하고, 나머지를 반환한다.

[CODE]#!/bin/sh unset foo echo ${foo:-bar} foo=fud echo ${foo:-bar} foo=/usr/bin/X11/startx echo ${foo#*/} echo ${foo##*/} bar=/usr/local/etc/local/networks echo ${bar%local*} echo ${bar%%local*} exit 0[/CODE]
결과
[CODE]bar fud usr/bin/X11/startx startx /usr/local/etc/ /usr/[/CODE]
posted by progh2