이 문서는 당신이 기초적인 셸 스크립트 프로그래밍을 시작하는 것을 도와
주기 위해 쓰려고 한다. 이것은 제목을 보면 알겠지만 어느 정도 능숙한
사람을 위한 것은 아니다. 나는 뛰어나거나 혹은 전문적인 쉘 프로그래머가
아니고, 내가 더 많이 배우게 될 것인 동시에 다른 사람들에게 유용할
것이므로 쓰고 있는 것 뿐이다. 어떤 질문 혹은 첨가할 내용이라도 제언해
준다면 그들 중에 일부는 이 문서 추가 버전에 포함될 것이다.
______________________________________________________________________
목차
1. 시작하면서
1.1 이 문서의 최신 버전을 입수하려면
1.2 필요한 요건
1.3 이 문서의 활용
2. 기초적인 스크립트
2.1 고전적인 hello world 스크립트
2.2 아주 간단한 백업 스크립트
3. 리디렉션의 모든 것
3.1 정의와 간단한 목차
3.2 예제 : 표준 출력을 파일로
3.3 예제 : 표준 에러를 파일로
3.4 예제 : 표준 출력을 표준 에러로
3.5 예제 : 표준 에러를 표준 출력으로
3.6 예제 : 표준 에러와 표준 출력을 파일로
4. 파이프
4.1 파이프의 역할과 그것을 사용하는 이유
4.2 예제 : sed를 사용한 간단한 파이프
4.3 예제 : ls -l *.txt 에 대한 양자택일
5. 변수
5.1 예제: 변수를 사용한 Hello World!
5.2 예제: 조금 더 개량된 아주 간단한 백업 스크립트
5.3 지역 변수
6. 조건문
6.1 간단히 말해서....
6.2 예제 : if .. then 을 사용하는 기본적인 표현
6.3 예제 : if .. then ... else 를 사용하는 기본적인 표현
6.4 예제 : 변수를 사용하는 조건문
7. for, while 그리고 until 을 사용하는 루프
7.1 For 를 사용하는 예
7.2 C와 사용법이 비슷한 for
7.3 While 을 사용하는 예
7.4 Until 을 사용하는 예
8. 함수
8.1 함수 예제
8.2 매개변수가 들어가는 함수 예제
9. 사용자 인터페이스
9.1 단순한 메뉴를 만들기 위한 select 문 이용하기
9.2 명령행을 이용하기
10. 더 많이 알기
10.1 read 문으로 사용자 입력 받기
10.2 산술적인 계산
10.3 bash를 찾기
10.4 프로그램이 되돌리는 값 받기
10.5 명령의 결과 캡처하기
10.6 다중 소스 파일
11. 표
11.1 문자열 비교 연산자
11.2 문자열 비교의 예제
11.3 산술 연산자
11.4 산술 관계 연산자
11.5 유용한 명령들
12. 다른 스크립트들
12.1 디렉토리 안의 모든 파일에 적용하기
12.2 아주 간단한 백업 스크립트(조금 더 나아진 것)
12.3 파일 이름을 바꿔 주는 스크립트
12.4 파일 이름을 바꿔 주는 스크립트(간단한 것)
13. 문제가 생겼을 때
13.1 BASH를 호출하는 방법들
14. 이 문서에 관하여
14.1 내용의 보증
14.2 Thanks to
14.3 갱신
14.4 더 많은 정보
______________________________________________________________________
1. 시작하면서
1.1. 이 문서의 최신 버전을 입수하려면 다음을 참조하라.(영어임)
http://www.linuxdoc.org/HOWTO/Bash-Prog-Intro-HOWTO.html
1.2. 필요한 요건
GNU/Linux 명령 체계에 익숙하고 기초적인 프로그래밍 개념들을 알고
있으면 도움이 된다. 이것은 기초적인 프로그래밍 강좌가 아니기 때문에
최소한의 기본 개념은 있어야 하는 것이다.
1.3. 이 문서의 활용
이 문서는 다음과 같은 상황에서 유용하게 사용되어질 수 있다.
? 당신이 프로그래밍에 관한 아이디어가 떠올라 그것을 셸 스크립트로 작성하
기를 원할 때
? 당신이 셸 프로그래밍에 관한 막연한 지식만을 가지고 있고, 그에 대한
정리가 필요하다고 느낄 때.
? 당신이 당신의 프로그램을 시작하기에 앞서 참고할 말들과 예제 스크립트들을
보기를 원할 때.
? 당신이 도스나 윈도에서의 배치 파일을 만들기를 원하거나 혹은 이미 만들어
보았을 경우.
? 당신이 완벽한 바보라서, 모든 하우투를 다 읽어 봐야 직성이 풀리는 경우.-_-
2. 기초적인 스크립트
이 HOW-TO 는 당신의 shell 프로그래밍에 있어 힌트를 주기 위해
예제에 기초하고 있다.
이 섹션에서 당신은 당신이 몇몇 테크닉을 이해하는 데 있어 도움이 될
간단한 스크립트들을 볼 수 있을 것이다.
2.1. 고전적인 hello world 스크립트
#!/bin/bash
echo Hello World
이 스크립트틑 딱 두 줄로 이루어져 있다. 첫 번째 줄에서는 이 파일을 실행하는
데 필요한 프로그램이 시스템 어디에 있는지의 경로를 적어준다. 두 번째 줄은
오직 실행을 위한 부분으로 "Hello World"를 터미널상에 출력하는 것이다.
2.2. 아주 간단한 백업 스크립트
#!/bin/bash
tar -cZf /var/my-backup.tgz /home/me/
이 스크립트에서 터미널에 메시지를 출력하는 것은 제외하고, 우리는 우리의 홈
디렉토리를 tar로 묶은 파일을 생성하는 것이다. 이것은 사용할만한 것은 못 된다.
사용할만한 백업 스크립트는 이 문서의 더 뒷 부분에 나오게 될 것이다.
3. 리디렉션의 모든 것
3.1. 정의와 간단한 목차
3가지의 파일 서술자가 있다. 표준 입력, 표준 출력, 표준 에러가 그것이다.
기본적으로 당신이 할 수 있는 것은 다음과 같다.:
1. 표준 출력을 파일로 보내기
2. 표준 에러를 파일로 보내기
3. 표준 출력을 표준 에러로 보내기
4. 표준 에러를 표준 출력으로 보내기
5. 표준 에러와 표준 출력을 파일로 보내기
6. 표준 에러와 표준 출력을 표준 출력으로 보내기
7. 표준 에러와 표준 출력을 표준 에러로 보내기
1 'represents' stdout and 2 stderr.
이것들을 보는 데 대해 간단히 군소리를 붙이자면 : 더 적은 명령어를 사용하여
당신은 표준 출력(버퍼에는 남아 있는)과 표준 에러를 화면상에서 볼 수 있지만,
당신이 ``전반적으로 보려'' 하는 것은 버퍼에서 지워질 것이다.
3.2. 예제 : 표준출력을 파일로
이것은 어떤 프로그램의 실행 결과를 파일로 출력하는 방법이다.
ls -l > ls-l.txt
자, 이 'ls-l.txt'라 불리는 파일이 당신이 'ls -l'의 명령을 실행하였을 때
화면에서 볼 수 있는 내용을 포함하는 상태로 생성될 것이다.
3.3. 예제 : 표준에러를 파일로
이것은 어떤 프로그램의 표준 에러의 출력을 파일에 쓰는 방법이다.
grep da * 2> grep-errors.txt
자, 이제 'grep-errors.txt' 라는 파일이 만들어 질 것이고 이것은 당신이
원래는 'gerp da *' 의 명령을 내려서 화면에 출력되었을 표준 에러문을
포함하고 있을 것이다.
3.4. 예제 : 표준 출력을 표준 에러로
이것은 어느 프로그램의 표준 에러 출력을, 지정된 파일에 기록하는 대신
표준 출력으로 보이는 것이다.
grep da * 1>&2
자, 명령의 표준 출력 형태가 표준 에러에게 보내졌다. 당신은 이것을 다른
방법으로도 응용할 수 있을 것이다.
3.5. 예제 : 표준 에러를 표준 출력으로.
이것은 프로그램에서의 표준 에러의 출력을 지정된 파일에 기록하는 대신
표준 출력으로 보이는 것이다.
grep * 2>&1
자, 명령의 표준 에러 상태가 표준 출력에게 보내졌다. 만약 당신이 좀 더
줄이기 위해 파이프를 사용한다면 당신은 정상적으로는 소멸된 줄(표준 에러
로서 쓰여지는 것들)이 표준 출력으로서 눈 앞에 보이는 것을 보게 될 것이다.
3.6. 예제 : 표준 출력과 표준 에러를 파일로.
이것은 프로그램의 모든 출력을 파일로 보낼 것이다. 이것은 어떤 명령이
조용히 실행되고 넘어가기를 원할 cron의 대기열에는 때때로 어울리기도 한다.
rm -f $(find / -name core) &> /dev/null
이와 같은(cron 대기열에서 같은 경우를 생각하자.) 것은 core 라고 불리우는
모든 파일은 어떤 디렉토리 안에 들어 있는 것일지라도 지울 것이다. 당신은
당신이 그 출력결과를 보고 싶어하는 어떤 명령이 실행되는 것을 숙고하고 실행할
필요가 있다.
4. 파이프
이 섹션은 파이프를 어떻게 사용하느냐에 대한 아주 간단한 연습이 될 만한
것들을 소개하고, 당신이 왜 파이프를 사용하게 되는지를 살펴보게 된다.
4.1. 파이프의 역할과 그것을 사용하는 이유
파이프는 당신이 어느 프로그램의 출력을 다른 것의 입력으로 변환하려 할 때
아주 간단하게 그 작업을 수행하게 한다.
4.2 예제 : sed를 사용한 간단한 파이프
이것은 파이프를 사용하는 아주 간단한 방법이다.
ls -l | sed -e "s/[aeio]/u/g"
자, 이런 일에서 앞선 명령은 먼저 ls -l을 실행하여 그 결과를 화면에
출력하는 대신, 파이프를 통해 sed 프로그램으로 보내어 sed까지 실행된 결과를
출력하게 된다.
4.3 예제 : ls -l *.txt 에 대한 양자택일
일반적으로, ls -l *.txt를 쓰는 방법 중에서 더 까다로운 쪽이지만
이것은 파이프에 대한 예로서 목록화의 딜레마를 풀기 위해서라던가 그런
것은 아니다.
ls -l | grep "\.txt$"
자, 이 ls -l의 출력은 grep으로 넘어가서 "\.txt$"와 매치되는 줄만
화면에 출력하게 될 것이다.
5. 변수
당신은 어떤 프로그래밍 언어에서라도 변수를 사용해 보았을 것이다. 여기서
는 데이터 타입 같은 것이 필요없다. bash에의 변수는 숫자, 문자, 문자열
모두를 포함하기 때문이다.
당신은 변수를 선언할 필요도 없다. 그냥 적재 적소에 사용하는 것으로
생성하는 것이다.
5.1. 예제 : 변수를 사용한 Hello World!
#!/bin/bash
STR="Hello World!"
echo $STR
두번째 줄은 "Hello World!"라는 문자열을 대체하는 변수 STR을 생성한다.
그리고 이 변수의 값은 $이라는 문자가 변수의 앞에 놓일 때 사용된다.
주의할 것은 만약 당신이 $ 표시를 사용하지 않는다면 출력되는 프로그램의
결과는 당신이 원하던 것과는 사뭇 다를 것이라는 점이다.
5.2. 예제 : 조금 더 개량된 아주 간단한 백업 스크립트
#!/bin/bash
OF=/var/my-backup-$(date +%Y%m%d).tgz
tar -cZf $OF /home/me/
이 스크립트는 다른 것을 소개하고 있다. 먼저, 당신은 두번째 줄에서
변수를 선언라는 익숙한 모습을 보게 된다. 이 표현에서의 주의할 점은
당신이 이 스크립트를 실행하면 이 안에 있는 명령을 실행하여 그 값을
출력하는 과정이 수행된다는 것이다.
이 스크립트에서는 출력되는 파일 이름이 매일매일 달라진다. 이것은
data 명령에 의해 형식에 맞춰 출력 이름이 바뀌어 지기 때문이다. 당신은
이것을 당신이 원하는 다른 형식으로 바꿀 수도 있다.
예를 약간만 더 들어 보자:
echo ls
echo $(ls)
5.3. 지역 변수
지역 변수는 지역에서의 사용을 위해 만들어진다.
#!/bin/bash
HELLO=Hello
function hello {
local HELLO=World
echo $HELLO
}
echo $HELLO
hello
echo $HELLO
이 예는 지역 변수를 설명하는 데 있어 충분하다고 생각된다.
6. 조건문
조건문은 당신이 어떤 일을 수행하는가 혹은 하지 않는가의 문제를 표현하는
방법이다.
6.1. 간단히 말해서....
조건문은 많은 형식으로 표현할 수 있다. 가장 기본적인 것은 if (조건)
then (실행할 내용) 으로 구성되는 것으로 실행할 내용은 오직 조건이
맞을 때에만 실행된다.
조건문을 사용할 수 있는 이런 형식도 있다. if (조건) then (실행할 내용 1)
else (실행할 내용 2) 와 같은 형식에서는 조건이 참이면 실행할 내용 1이
실행되고, 그렇지 않으면 실행할 내용 2가 실행되는 것이다.
조건문의 또 다른 형식으로, if (조건 1) then (실행할 내용 1)
else if (조건 2) then (실행할 내용 2) else (실행할 내용 3)이 있다.
이와 같은 형식에서는 else if (조건 2) them (실행할 내용 2) 가 추가되어
있는다, 이것은 만약 조건 1은 만족하지 않고 조건 2를 만족하면 실행할 내용 2
가 실행되고 그렇지 않으면 실행할 내용 3이 실행된다는 것이다. 다른 표현
방식들에 관해서는 지금까지 본 것들을 토대로 하여 각자 생각해 보기로 하자.
문법에 관하여:
if를 bash에서 사용하는 것은 다음과 같은 모습이다.
if [expression];
then
code if 'expression' is true.
fi
6.2. 예제 : if .. then 을 사용하는 기본적인 표현
#!/bin/bash
if [ "foo" = "foo" ]; then
echo expression evaluated as true
fi
이 코드는 if 의 조건이 당연히 성립하므로 then에서 조건문을 마치는 뜻의
실행 코드인 fi사이의 내용이 실행된다.
6.3. 예제 : if .. then ... else 를 사용하는 기본적인 표현
#!/bin/bash
if [ "foo" = "foo" ]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi
6.4. 예제 : 변수를 사용하는 조건
#!/bin/bash
T1="foo"
T2="bar"
if [ $T1 = $T2 ]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi
7. for, while 그리고 until 을 사용하는 루프
이 섹션에서 당신은 for, while 그리고 until 을 사용하는 루프를 알게된다.
for를 사용하는 루프는 다른 프로그래밍 언어와는 약간 다르다. 기본적으로
이것은 당신을 일련의 과정상에서 되풀이하게 한다.
루프를 조절하는 표현자가 true를 나타낼 때는 순환을 계속하고, 그렇지
않을 시(표현자가 false일 때)에는 멈추게 되는 것이라면 루프의 표현으로서
while을 코드의 한 부분에 사용할 수 있다. break를 실행되는 코드 안에 넣는
것도 좋다.
무한 루프는 대부분 while을 쓸 때 코드에 표현자를 false로 만들어 주는
부분이 결여되어 있을 시에 일어난다.
당신이 "while과 until은 비슷한 거 아냐?" 하고 생각한다면 제대로 생각한
것이다.
7.1. For 를 사용하는 예
#!/bin/bash
for i in $( ls ); do
echo item: $i
done
두 번째 줄에서 우리는 i를 $( ls )에 의해 계속 변하는 변수로서 선언했다.
세 번째 줄은 필요하다면 더 길어지거나 혹은 더 많은 줄을 사용할 수도 있다.
한 번의 순환이 끝나고 $i는 새로운 값을 얻었다.
이 스크립트는 아주 단순한 것이지만 루프를 사용하여 할 수 있는 더 유용한
방법이 많이 있다.
7.2. C와 사용법이 비슷한 for
루프시키는 또 다른 방법이 있다. 이것은 for를 사용하여 루프하지만
C나 perl 에서 사용하는 for과 비슷한 방식이다.
#!/bin/bash
for i in `seq 1 10`;
do
echo $i
done
7.3. While 을 사용하는 예
#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]; do
echo The counter is $COUNTER
let COUNTER=COUNTER+1
done
이 스크립트는 (C, Pascal, perl, python, 기타 등등으로 인하여) 잘 알려진
for 를 흉내내고 있다.
7.4. Until 을 사용하는 예
#!/bin/bash
COUNTER=20
until [ $COUNTER -lt 10 ]; do
echo COUNTER $COUNTER
let COUNTER-=1
done
8. 함수
거의 모든 프로그래밍 언어에서, 당신은 코드의 묶음인 함수를 논리적인
이점 혹은 재귀적인 미학에 의해 사용할 수 있다.
함수를 오직 function 함수이름 { 힘수코드 }의 형식으로 써 보아라.
함수라 불리는 것은 당신이 이름을 붙이는 또 다른 프로그램과 같다.
8.1. 함수 예제
#!/bin/bash
function quit {
exit
}
function hello {
echo Hello!
}
hello
quit
echo foo
2번째 줄에서 4번째 줄은 quit 라는 함수를, 5번째 줄에서 7번째 줄은
hello라는 함수를 포함한다. 당신이 이와 같은 스크립트가 어떻게
실행되는지를 이해할 수 없다면 더 노력해 주었으면 한다.
함수는 어떤 특별한 명령을 통해 선언될 필요가 없다는 것에 주의하자.
이 스크립트는 먼저 hello를 호출하고, 그 다음으로 quit 함수를 호출한다.
그리고 quit 함수에서 스크립트가 끝나기 때문에 이 프로그램은 10번째 줄은
실행하지 못한다.
8.2. 매개변수를 사용하는 함수 예제
#!/bin/bash
function quit {
exit
}
function e {
echo $1
}
e Hello
e World
quit
echo foo
이 스크립트는 먼저 본 것과 거의 같은 것이다. 가장 달라진 것은 e라는
함수이다. 이 함수는 첫번째 인수를 돌려받아 출력한다. 함수에서의 인수는
스크립트에서 받은 인수에 대한 같은 방식으로 취급된다.
9. 사용자 인터페이스
9.1. 단순한 메뉴를 만들기 위한 select 문 이용하기
#!/bin/bash
OPTIONS="Hello Quit"
select opt in $OPTIONS; do
if [ $opt = "Quit" ]; then
echo done
exit
elif [ $opt = "Hello" ]; then
echo Hello World
else
clear
echo bad option
fi
done
당신이 이 스크립트를 실행하면 당신은 프로그래머들이 바라는 단순한
텍스트 기반의 메뉴를 보게 될 것이다. 당신은 이것이 각각의 단어가
$OPTION과 일치할 때 실행된다는 점에서 'for'의 사용과 비슷하다는 점에
주목할 필요가 있다.
9.2. 명령행을 이용하기
#!/bin/bash
if [ -z $1 ]; then
echo usage: $0 directory
exit
fi
SRCD=$1
TGTD="/var/backups/"
OF=home-$(date +%Y%m%d).tgz
tar -cZf $TGTD$OF $SRCD
이 스크립트의 결과는 당신에게 아주 명쾌하게 다가올 것이다. 첫번째 조건
테스트의 표현에서 프로그램은 ($1)이라는 인수를 받고 종료하거나 혹은
그렇지 않고 사용자에게 짧은 경고의 메시지를 내보일 것이다. 이 스크립트의
결과는 이런 점에서 단순한 것이다.
10. 더 많이 알기
10.1. read 문으로 사용자 입력 받기
많은 경우 당신은 프롬프트 상에서 사용자의 입력을 받아 그에 따른 동작을
하도록 프로그램을 작성하기를 원할 것이다. 몇 가지 방법 중에서도 이것이
가장 일반적인 예이다.
#!/bin/bash
echo Please, enter your name
read NAME
echo "Hi $NAME!"
변수에서, 당신은 다양한 값을 읽어 들일 수 있을 것이다. 이 예제가 그것을
단적으로 보여 준다.
#!/bin/bash
echo Please, enter your firstname and lastname
read FN LN
echo "Hi! $LN, $FN !"
10.2. 산술적인 계산
명령행 상에서 다음을 입력해 보자.:
echo 1 + 1
당신이 '2'를 얻기를 원한다면, 분명히 착각한 것이다. 당신이 숫자를
입력하여 계산하여 그 결과로서 원하는 값을 얻기 위해서 BASH 에서는 다음과
같이 해야 한다.:
echo $((1+1))
이것은 조금 더 논리적인 출력이 이루어진다. 이것은 더욱 산술적인 표현이다.
당신은 이와 같이 나타낼 수도 있다. :
echo $[1+1]
당신이 나눗셈이나 혹은 더 여러가지 당신이 원하는 수학적인 계산을 필요로
한다면, 당신은 bc를 사용하는 것이 좋다.
만일 내가 "echo $[3/4]"를 명령행에서 실행하였다면, 이것은 0을 답으로
내놓는다. 그것은 bash는 오직 정수만을 취급하기 때문이다. 만일 당신이
"echo 3/4|bc -l" 를 실행한다면 당신은 원하는 값인 0.75를 얻을 수 있다.
10.3. bash를 찾기
(마이크가 보내준 내용이다. 참 감사하고 있고.....)
우리가 지금까지 다룬 예에서 우리는 #!/bin/bash 의 꼴로 사용했다.
bash가 어디 있는지 찾으려면 어떻게 해야 할까? 다음의 위치를 확인해 보자.
ls -l /bin/bash
ls -l /sbin/bash
ls -l /usr/local/bin/bash
ls -l /usr/bin/bash
ls -l /usr/sbin/bash
ls -l /usr/local/sbin/bash
최소한 내가 찾은 것은 이 정도이다. 다른 시스템에서는 다른 방식이 적용될
것이다. 혹은 당신은 'wich bash'를 이용할 수도 있다.
10.4. 프로그램이 되돌리는 값 받기
bash에서, 프로그램이 되돌리는 값은 특별한 변수인 $? 를 사용하게 된다.
다음의 것은 프로그램이 되돌리는 값을 캡처하기 위한 것이다. 나는 dada 라는
디렉토리가 존재하지 않음을 가정하고 있다. (이것 역시 마이크의 작품이다.)
#!/bin/bash
cd /dada &> /dev/null
echo rv: $?
cd $(pwd) &> /dev/null
echo rv: $?
10.5. 명령의 결과 캡처하기
이 짧은 스크립트는 데이터 베이스 안의 모든 테이블을 보여 준다.(당신이
MySQL을 사용하고 있을 때의 이야기이다.) 역시, mysql의 사용자 이름과
패스워드를 사용할 수 있다.
#!/bin/bash
DBS=`mysql -uroot -e"show databases"`
for b in $DBS ;
do
mysql -uroot -e"show tables from $b"
done
10.6. 다중 소스 파일
당신은 명령 소스가 담긴 여러 파일들을 동시에 사용할 수 있다.
__직접 해 보자__
11. 표
11.1. 문자열 비교 연산자
(1) s1 = s2
(2) s1 != s2
(3) s1 < s2
(4) s1 > s2
(5) -n s1
(6) -z s1
(1) s1 은 s2 와 같다.
(2) s1 은 s2 와 같지 않다.
(3) __직접 해 보자__
(4) __직접 해 보자__
(5) s1 은 빈 문자열이 아니다.(즉 한 개 이상의 문자를 포함하고 있다.)
(6) s1 은 빈 문자열이다.
11.2. 문자열 비교의 예제
두 문자열을 가정하자.
#!/bin/bash
S1='string'
S2='String'
if [ $S1=$S2 ];
then
echo "S1('$S1') is not equal to S2('$S2')"
fi
if [ $S1=$S1 ];
then
echo "S1('$S1') is equal to S1('$S1')"
fi
11.3. 산술 연산자
+
-
*
/
% (나머지)
11.4. 산술 관계 연산자
-lt (<)
-gt (>)
-le (<=)
-ge (>=)
-eq (==)
-ne (!=)
C 프로그래머들은 이것들을 쉽게 이해할 수 있을 것이다.
11.5. 유용한 명령들
sed (유용한 에디터)
gawk
grep (일치하는 것이 있는 지 검색)
wc (단어 혹은 줄 수를 확인)
sort
bc (계산기)
cut (행을 수정한다.)
tput (일반적인 터미널에서 정보를 얻어 온다)
이것들은 프로그램을 만들면서 유용하고 또한 자주 사용하게 될 것들이다.
(그런 것들 중에서도 최소한이다!) 작은 프로그램은 당신에게 명령행에서
진정한 마법을 펼치도록 해 줄 것이다.
12. 다른 스크립트들
12.1. 디렉토리 안의 모든 파일에 적용하기
12.2. 아주 간단한 백업 스크립트(조금 더 나아진 것)
#!/bin/bash
SRCD="/home/"
TGTD="/var/backups/"
OF=home-$(date +%Y%m%d).tgz
tar -cZf $TGTD$OF $SRCD
12.3. 파일 이름을 바꿔 주는 스크립트
#!/bin/sh
# renna: rename multiple files according to several rules
# written by felix hudson Jan - 2000
#first check for the various 'modes' that this program has
#if the first ($1) condition matches then we execute that portion of the
#program and then exit
# check for the prefix condition
if [ $1 = p ]; then
#we now get rid of the mode ($1) variable and prefix ($2)
prefix=$2 ; shift ; shift
# a quick check to see if any files were given
# if none then its better not to do anything than rename some non-existent
# files!!
if [$1 = ]; then
echo "no files given"
exit 0
fi
# this for loop iterates through all of the files that we gave the program
# it does one rename per file given
for file in $*
do
mv ${file} $prefix$file
done
#we now exit the program
exit 0
fi
# check for a suffix rename
# the rest of this part is virtually identical to the previous section
# please see those notes
if [ $1 = s ]; then
suffix=$2 ; shift ; shift
if [$1 = ]; then
echo "no files given"
exit 0
fi
for file in $*
do
mv ${file} $file$suffix
done
exit 0
fi
# check for the replacement rename
if [ $1 = r ]; then
shift
# i included this bit as to not damage any files if the user does not specify
# anything to be done
# just a safety measure
if [ $# -lt 3 ] ; then
echo "usage: renna r [expression] [replacement] files... "
exit 0
fi
# remove other information
OLD=$1 ; NEW=$2 ; shift ; shift
# this for loop iterates through all of the files that we give the program
# it does one rename per file given using the program 'sed'
# this is a sinple command line program that parses standard input and
# replaces a set expression with a give string
# here we pass it the file name ( as standard input) and replace the nessesary
# text
for file in $*
do
new=`echo ${file} | sed s/${OLD}/${NEW}/g`
mv ${file} $new
done
exit 0
fi
# if we have reached here then nothing proper was passed to the program
# so we tell the user how to use it
echo "usage;"
echo " renna p [prefix] files.."
echo " renna s [suffix] files.."
echo " renna r [expression] [replacement] files.."
exit 0
# done!
12.4. 파일 이름을 바꿔 주는 스크립트(간단한 것)
#!/bin/bash
# renames.sh
# basic file renamer
criteria=$1
re_match=$2
replace=$3
for i in $( ls *$criteria* );
do
src=$i
tgt=$(echo $i | sed -e "s/$re_match/$replace/")
mv $src $tgt
done
13. 문제가 생겼을 때
13.1. BASH를 호출하는 방법들
맨 첫번째 줄에 다음 행을 추가하는 것이 좋은 방법이다.
#!/bin/bash -x
이것은 흥미로운 출력 형식을 만들어 낸다.
14. 이 문서에 관하여
문서의 정정, 혹은 당신이 이 문서에서 흥미를 느끼는 부분에 대한 제안이
자유롭다. 나는 그런 점들을 차후의 업데이트에 반영할 것이다.
(아래 내용은 번역하지 않습니다. : 옮기는 인간 주)
14.1. 내용의 보증
This documents comes with no warranty of any kind. and all that
14.2. Thanks to
? Nathan Hurst for sending a lot of corrections.
? Jon Abbott for sending comments about evaluating arithmetic
expressions.
? Laurent Martelli for translating this document to French (soon
here the URL)
H
? Felix Hudson for writing the renna script
? Kees van den Broek (for sending many corrections)
? Mike (pink) made some suggestions about locating bash and testing
files
? fiesh make a nice suggestion for the loops section.
14.3. 갱신
Samples added on string comparison.
v0.8 More little additions.
v0.7 More corrections and some old TO-DO sections written.
v0.6 Minor corrections.
v0.5 Added the redirection section.
v0.4 disapperd from its location due to my ex-boss and thid doc found
it's new place at the proper url: www.linuxdoc.org.
prior: I don't rememeber and I didn't use rcs nor cvs :(
14.4. 더 많은 정보
Introduction to bash (under BE)
http://org.laol.net/lamug/beforever/bashtut.htm

관리자
04-08-04 16:07
0개
13회
일반문서
[강좌] Bash Sell Programing
댓글목록
등록된 댓글이 없습니다.