2013년 1월 16일 수요일

쉘 개념 정리

쉘은 무엇인가?
파이프와 재지향(Pipe & Redirection)
재지향 출력
다음은 ls의 출력을 lsoutput.txt로 한다. 이 때 기본적으로 파일의 내용이 있는 경우 덮어 쓰여진다. 
ls -l > lsoutput.txt
출력을 파일에 추가하려면 >>를 사용한다.
ps >> lsoutput.txt

출력과 에러정보를 서로 다른 파일에 기록한다.
kill -1 1234 > killout.txt 2>killerr.txt

두가지 종류의 출력을 모두 하나의 파일에 저장하려면 >& 를 사용한다.
kill -1 1234 > killouterr.txt 2>&1

재지향 입력
more < killout.txt

파이프
파이프를 사용하면 여러 프로세스를 함께 연결할 수 있다.

ps > psout.txt
sort psout.txt > pssort.out
을 파이프로 연결하면 ...
ps | sort > pssort.txt

쉘을 제외한 현재 수행되고 있는 서로 다른 프로세스를 보려면...
ps -a | sort | uniq | grep -v sh | more

여기서 uniq는 서로 다른 프로세스를 뽑아내고, grep -v sh는 sh 이름이 붙은 프로세스를 제거한다.
프로그래밍 언어로서의 쉘
  • 대화식 프로그램
  • 스크립트 작성하기
  • 실행 가능한 스크립트 만들기
쉘 문법
  • 변수
인용 처리
다음 예제를 통해 인용처리를 살펴보자..
-----------------------------------------
#!/bin/sh
myvar="Hi there"

echo $myvar
echo "$myvar"
echo'$myvar'
echo \$myvar

echo Enter some text
read myvar

echo '$myvar' now equals $myvar
exit 0
--------------------------------------------

환경 변수
$HOME - 사용자의 홈 디렉토리
$PATH - 명령어 찾기에 사용되는 콜론(:)으로 구분되는 디렉토리 목록
$PS1 - 명령행 프롬프트, 보통 $
$PS2 - 두번째 프롬프트. 보통 >
$IFS - 입력 필드 구분자, 보통 스페이스, 탭, 개행문자
$0 - 쉘 스크립트 이름
$# - 전달된 인자의 갯수
$$ - 쉘 스크립트의 프로세스 ID

인자변수
$1, $2 - 스크립트로 전달된 인자
$* - 스크립트로 전달된 인자 전체로 하나의 변수에 저장되어 IFS 환경 변수의 첫번째 문자로 구분
$@ - $*와는 미묘한 차이가 있다. 이 변수는 IFS 환경변수를 사용하지 않는다.
  • 조건문
test와 []명령
  • 제어구조
if
elif
변수에서의 문제
for
while
until
case
목록
구문 블록
  • 함수
  • 명령어
break
:명령
continue
.명령
echo
eval
exec
exit n
export
expr
printf
return
set
shift
trap
  • 명령 실행
산술 확장
매개 변수 확장
  • 쉘 스크립트 내부에서 명령에 입력 전달하기(Here Documents)
  • 디버깅 스크립트

댓글 없음:

댓글 쓰기