출력 재지정
덮어쓰기( > 연산자 ) : 덮어쓰기를 하고 싶지 않을 경우 set -o noclobber ( 또는 set -C ). 다시 돌아올 때는 set +o noclobber.
ls -l > lsoutput.txt>

파일 끝에 추가 ( >> 연산자 )
ps >> lsoutput.txt


표준 파일 서술자: 0 (표준입력), 1(표준출력), 2(표준오류출력)
표준 출력 이외의 출력을 재지정할 때는 > 연산자 앞에 표준 파일 서술자를 붙인다.

표준 오류 재지정 ( 2> 연산자 ) : 프로그램이 출력하는 오류 정보가 화면에 나타나지 않게 하고 싶을 때 유용
kill -HUP 1234 >killout.txt 2>killerr.txt

같은 파일에 지정하고 싶을 경우... ( &1 앞과 같은 장소에 저장 )
kill -1 1234 >killouterr.txt 2>&1

일반적으로 kill과 같은 명령은 반환 코드를 돌려주기 때문에 표준 출력과 표준 오류 모두 저장할 필요가 없을 수 있다. 그런 경우 리눅스에서는 /dev/null이라는 범용 "비트 휴지통"에 출력 내용을 버리면 된다.
kill -1 1234 >/dev/null 2>&1


파이프
ps -xo comm | sort | uniq | grep -v sh | more

ps의 결과를 알파벳으로 정렬 후 중복은 제거하고 sh라는 프로세스를 제거한 후 페이지 별로 화면에 출력.
주의사항.
일련의 명령들을 수행할 때 출력 파일은 그 명령들이 시작되는 즉시 생성 또는 기록된다. 하여, 같은 이름을 두번 사용하면 안된다.
cat mydata.txt | sort | uniq | > mydata.txt

이 경우 cat이 mydata.txt를 읽기 전에 빈 파일로 덮어쓰여진다.



셸 문법

변수

쉘의 변수는 문자열을 받는 것으로 간주된다. 변수의 값에 접근할 때는 $를 붙인다. 또 변수에 값을 대입할때 = 사이에 빈칸을 넣으면 안된다.
sal=7+5
echo $sal
7+5   // 문자열로 인정

사용자의 입력을 변수에 넣을 경우 read 명령어를 사용한다.
read sal
hi! good morning!   // 사용자 입력
echo $sal
hi! good mornig!   // 출력됨.


따옴표 처리
큰 따옴표 안의 $변수는 그 값으로 대체 되고 작은 따옴표는 $변수 그대로 보여준다. $ 표시를 보이고 싶으면 \$ 사용

#!/bin/sh

var="hi~ hi~"

echo $var       // hi~ hi~ 출력
echo "$var"       // hi~ hi~ 출력
echo '$var'       // $var 출력
echo \$var      // $var 출력

echo Enter text    
read var // test test 입력

echo '$var' equals $var    // $var equals test test 출력
exit 0


환경변수
쉘 스크립트가 시작될 때, 환경에 설정된 값들로 초기화되는 변수들 몇 개가 자동으로 만들어진다. ( env 명령으로 볼 수 있음 )
 환경변수  설명
 $HOME  현재 사용자의 홈 디렉토리
 $PATH  명령들 검색할 디렉터리들의 목록 ( 콜론으로 구분 )
 $PS1  명령 프롬프트. $일 수도 있고 아닐 수 도 있음
 $PS2  추가로 입력받을 때 나오는 프롬프트. 대부분 >
 $IFS  입력 필드 구분자.
쉘이 입력을 읽을 때 구분하는 용도로 쓰임. 빈칸,탭, 새줄
 $0  현재 쉘 스크립트 이름 
 $#  매개변수 갯수
 $$  쉘 스크립트의 프로세서 ID. 고유한 임시파일을 만들 때 많이 쓰임
( /tmp/tmp_$$ )

매개변수 참조 변수
$1, $2 ..... - 매개변수 첫번째, 두번째.. 쉘에서 바로 대화식일 때는 바로 이전의 명령의 매개변수. 스크립트는 스크립트의 매개변수ex) set foo bar
$* - 매개변수가 여러개일 경우 $IFS로 구분하는 문자열 변수 ($IFS가 #이면 매개변수에다 차례로 'var1#var2#var3' <-- 이런 식의 변수가 됨.)
$@- 위와 같지만 $IFS와 상관없이 공백으로 구분된 문자열 변수. 일반적으로 매개변수는 이 참조 변수를 사용하는게 바람직하다.

IFS=''   //값을 없앤다.
set var1 var2 var3
echo "$@"           // var1 var2 var3 출력
echo "$*"            // var1var2var3 출력
unset IFS             // IFS 복구
echo "$*"              // var1 var2 var3 출력

'학습 정리 > Begginning Linux Programming' 카테고리의 다른 글

Chapter 1. 시작 ( 리눅스 기본 )  (0) 2011.09.20
Posted by 뿌리깊은 잡초
,