break
for, while, until 문에서 제어 조건을 만나기 전에 루프를 벗어날 때 사용
▼ [예제]
$vi sample1
#!/bin/sh
rm -rf file*
echo > file1
echo file2
mkdir file3
echo > file4
for var in file*
do
if [-d "$var"]
then
break;
fi
done
echo "directory name : $var"
exit 0
$chmod +* sample1
$./sample1
directory name : file3 |
|
: (콜론)
의미없는 널(null) 명령
wihle : dms while true로 대체
변수의 조건을 지정
표현식
: $(variable := value)
▼ [예제]
$vi sample2
#!/bin/sh
rm -r file
if [-f file]
then
:
else
echo "file did not exist"
fi
exit 0
$chmod +* sample2
$./sample2
file did not exist |
|
continue
for, while, until 문에서 루프의 변수를 다음 값을 가지게 하고 다음 번 루프를 반복할 때 사용
continue는 선택적인 매개인자를 가질 수 있으며, 이를 n이라고 하면 n은 1보다 커야 하고, n번재 둘러싸여진 루프에서 다시 수행하는데 n이 루프릐 개수보다 크다면 마지막 루프로 분기한다.
▼ [예제]
$vi sample3
#!/bin/sh
rm -rf file*
echo > file1
echo file2
mkdir file3
echo file4
for var in file*
do
if [-d "$var"]
then
continue
fi
echo "file name : $var"
done
exit 0
$chmod +* sample3
$./sample3
file name : file1
file name : file2
file name : file3 |
|
continue
for, while, until 문에서 루프의 변수를 다음 값을 가지게 하고 다음 번 루프를 반복할 때 사용
continue는 선택적인 매개인자를 가질 수 있으며, 이를 n이라고 하면 n은 1보다 커야 하고, n번재 둘러싸여진 루프에서 다시 수행하는데 n이 루프릐 개수보다 크다면 마지막 루프로 분기한다.
▼ [예제]
$vi sample3
#!/bin/sh
rm -rf file*
echo > file1
echo file2
mkdir file3
echo file4
for var in file*
do
if [-d "$var"]
then
continue
fi
echo "file name : $var"
done
exit 0
$chmod +* sample3
$./sample3
file name : file1
file name : file2
file name : file3 |
|
. (마침표)
현재의 Shell에서 명령을 실행할 때 사용
표현식
.Shellscript
일 반적으로 Shell 스크립트에서 스크립트나 외부 명령을 실행시키면 새로운 환경이 만들어지고 명령은 새로운 환경에서 실행되며 부모 Shell로 돌아가더라도 이전 환경은 무시되지만 source나 명령은 shell 스크립트에서 호출된 같은 Shell에서 명령들을 실행
기존의 환경변수를 변경할 수 있으며, 명령은 명령어가 실행되는 동안 현재 환경을 변화시키는 것을 허용
exit
탈출 코드 n으로 스크립트를 끝낼 때 사용
상호 대화식 Shell 명령행에서 사용하면 로그아웃
종료 상태를 저장하지 않고 스크립트를 끝내면 마지막 실행된 명령의 상태를 변환
Shell 스크립트 프로그래밍에서 0은 성공, 1부터 125까지는 에러, 126은 파일이 실행되지 않음, 127은 해당 명령을 발견할 수 없음, 128 이상은 시그널 발생을 의미한다
▼ [예제]
$vi sample6
#!/bin/sh
if [-f /etc/passwd]
then
exit 0
fi
exit 1 |
|
export
보조 Shell에서 변수를 배개 인자로 여길 때 사용
해당 Shell에서 파생된 자식 프로세스에서 export한 환경 변수는 본래 Shell에서 관리
set -a나 set -allexport 명령은 이후의 모든 변수들을 export
▼ [예제]
$vi sample7
#!/bin/sh
string1="shell programming"
export string2="linux shell"
sample8
$vi sample8
#!/bin/sh
echo"$string1"
echo "string2"
$chmod +* sample7 sample8
$./sample7
linux shell |
|
expr
인자로 사용되는 표현식의 값을 구할 때 사용
표현식
var2='expr $var1 + 1'
최근에는 좀 더 효율적인 $((...)) 구문을 사용
printf
가장 최근의 Shell에서만 사용 가능
X/Open은 형식화된 출력을 생성할 때는 echo가 아니라 printf를 사용해야만 한다고 규정한다
표현식
printf "format string" parameter1 parameter2 ...
▼ [formar string의 변환식별자]
set
Shell에서 매개인자를 설정
문자열을 공백으로 나누어진 필드로 출력할 때 유용
set -x를 사용하여 스크립트가 실행되는 것을 추적
▼ [formar string의 변환식별자]
$vi sample9
#!/bin/sh
echo Date : $(date)
set %(date)
echo Date : $6년 $2 $3$ $4
exit 0
$chmod +* sample9
$./sample9
Date : 일 7월 22 13:38:54 KST 2001
Date : 2001년 7월 22일 13:38:54 |
|
shift
모든 매개 변수를 한 칸 아래로 이동시키는 명령어
shift n을 사용하면 n+1 ... 위치에 있는 매개 인자를 $1 $2 ...로 변경
shift만 사용하면 n의 값은 1이고, n이 0이라면 어떤 매개인자도 변경되지 않으며, n의 값은 0에서 $#보다 같거나 같아야만 되며 $*, $@, $# 등의 변수는 새로운 매개 변수 배열에 맞추어 수정
shift는 매개 변수를 처음부터 끝까지 검색하는데 자주 사용
▼ [예제]
$vi sample10
#!/bin/sh
echo Date : $(date)
set %(date)
while ["$1"=!=""]
do
echo $1
shift
done
exit 0
$chmod +* sample10
Date : 일 7월 22 13:38:54 KST 2001
일
7월
22
13:49:31
KST
2001
$./sample9
Date : 일 7월 22 13:38:54 KST 2001
Date : 2001년 7월 22일 13:38:54 |
|
trap
Shell 프로그램에서 외부적이나 내부적 신호에 의해 프로세스가 중지되기 전에 인터럽트 신호를 보류
신호가 들어왔을 경우 프로그래머에게 동작으로 변경할 수 있도록 한다
Shell 프로그램이 signo를 받으면 Shell 프로그램이 중단되며, command가 수행되고 Shell 프로그램이 중단되었던 곳으로부터 재시작 되는데, signo를 무시하려면 'command' 대신 ''를 사용하고, ''가 없으면 종료
표현식
trap 'command' signo signo [signo]
▶ interupt processing
● Shell 프로그램의 수행은 인터럽트가 걸릴 수 있으며, 사용자는 <Break> / <Del> / <Reboot>키를 사용하여 키보드로 인터럽트를 걸 수 있다.
● 기본적으로 모든 Shell 프로그램은 인터럽트가 될 수 있을 뿐만 아니라 Shell 프로그램이 끝나기 전에 임시파일을 지울 경우나 임계 영역의 수행을 종료시킬 때 사용자가 인터럽트 처리하는 것이 필요하다. |
|
▶ interupt
● Shell 프로그램은 trap 명령을 이용하여 인터럽트를 다룰 수 있다
● trap 명령은 인터럽트를 다루기 위해 Unit Operating System 과 Interface를 함
● 유닉스 운영체계는 signal이라고 하는 특성을 제공한다
● signal은 프로그램에게 비정상적인 사항이 발생되었음을 알려주는 방법이고 키보드나 다른 프로그램으로부터 올 수 있다. |
|
▶ Signal
● 커널과 프로세스, 프로세스와 프로세스간에 어떤 이벤트 발생 시 프로세스에게 전달되는 수단으로 사용된다
● 프로세스들은 로그아웃이나 인터럽트와 같은 몇 가지 이벤트들이 발생하게 될 경우 시스템에게 전송하고 대부분의 시그널들은 프로세스들이 중단시킴
● forground에서 수행되는 명령어만이 키보드가 만드는 신호를 인식하고, background에서 수행중인 프로그램에 대해서는 kill 명령을 사용하여 신호전달이 가능 |
|
▶ trap 기능
● 신호에 따른 명령 수행
: 인터럽트 신호를 받아서 프로그래머가 원하는 작업을 수행하게 함
● 신호의 무시
: 프로세스를 중단시키는 대신 해당 신호망을 무시함
● 신호의 재설정
: 신호를 원래의 값으로 되돌려 놓음 |
|
시그널 이벤트
기타 명령어
출처 - http://blog.naver.com/akrthwn?Redirect=Log&logNo=140017739530