1. 변수, 연산
: 변수는 환경 변수, 인자 변수, 일반 변수로 구분된다.
: 변수 사용 시 C와 달리, 처음 선언하는 것이 아니라 변수를 처음 사용할 때 생성한다.
: 변수는 기본적으로 문자열로 저장되며, 변수의 내용을 보려면 $를 앞에 붙인 후 echo 명령으로 호출한다.
: 변수를 인용 처리 하려면, 작은 따옴표(')로 $변수를 묶거나 $앞에 \문자를 붙여 $의 특별한 의미를 없앨 수 있다.
: 변수의 값에 공백이 포함되면 앞뒤에 따옴표로 묶어주어야 하며, 등호(=) 앞뒤에 공백을 넣지 말아야 한다.
1.1. 환경 변수
: 쉘을 기동하면 기본적으로 셋팅되는 변수들로써,
일반적으로 사용자정의 변수와 구분하기 위해 대문자로 표현된다.
: 핵심 변수
$HOME 사용자 홈 디렉토리
$PATH 명령어 찾기에 사용되는 콜론(:)으로 구분되는 디렉토리 목록
$IFS 입력필드 구분자.
쉘 상에서 입력을 읽어들일 때 낱말을 구분하기 위한 목적으로 사용되는 문자 목록
보통은 스페이스, 탭, 개행 문자
$0 쉘 스크립트의 이름
: 변수 사용 시 C와 달리, 처음 선언하는 것이 아니라 변수를 처음 사용할 때 생성한다.
: 변수는 기본적으로 문자열로 저장되며, 변수의 내용을 보려면 $를 앞에 붙인 후 echo 명령으로 호출한다.
: 변수를 인용 처리 하려면, 작은 따옴표(')로 $변수를 묶거나 $앞에 \문자를 붙여 $의 특별한 의미를 없앨 수 있다.
: 변수의 값에 공백이 포함되면 앞뒤에 따옴표로 묶어주어야 하며, 등호(=) 앞뒤에 공백을 넣지 말아야 한다.
1.1. 환경 변수
: 쉘을 기동하면 기본적으로 셋팅되는 변수들로써,
일반적으로 사용자정의 변수와 구분하기 위해 대문자로 표현된다.
: 핵심 변수
$HOME 사용자 홈 디렉토리
$PATH 명령어 찾기에 사용되는 콜론(:)으로 구분되는 디렉토리 목록
$IFS 입력필드 구분자.
쉘 상에서 입력을 읽어들일 때 낱말을 구분하기 위한 목적으로 사용되는 문자 목록
보통은 스페이스, 탭, 개행 문자
$0 쉘 스크립트의 이름
$# 전달된 인자의 갯수
$$ 쉘 스크립트의 프로세스 ID
쉘 스크립트 내부에서 중복되지 않는 파일의 이름을 만들 때 자주 사용
1.2. 인자 변수
: 쉘 스크립트에 인자를 넘겨줄 때 해당 인자에 대한 정보를 갖고 있는 변수
$1, $2.. 스크립트로 전달된 인자
$* 스크립트로 전달된 인자 전체
환경 변수의 첫 번째 문자로 구분
$@ $*와 비슷하나 IFS 환경 변수를 사용하지 않음
1.3. 일반 변수
: 특별한 제약이 없으며 대소문자의 구분만 명확히 하면 된다.
1.4. 스크립트 파일 작성 예
#!/bin/sh
echo "This Script Executable File : $0"
echo "Argument Count : $#"
echo "Process ID : $$"
echo "Argument List \$* : $*"
echo "Argument List \$@ : $@"
echo "Argument 1 : $1"
echo "Argument 2 : $2"
-->실행
$chmod 755 argument (or chmod a+x argument)
$./test a1 a2
(파일로 작성하지 않고, 쉘에서 한 줄씩 커맨드 날려보며 확인해도 됨!)
$$ 쉘 스크립트의 프로세스 ID
쉘 스크립트 내부에서 중복되지 않는 파일의 이름을 만들 때 자주 사용
1.2. 인자 변수
: 쉘 스크립트에 인자를 넘겨줄 때 해당 인자에 대한 정보를 갖고 있는 변수
$1, $2.. 스크립트로 전달된 인자
$* 스크립트로 전달된 인자 전체
환경 변수의 첫 번째 문자로 구분
$@ $*와 비슷하나 IFS 환경 변수를 사용하지 않음
1.3. 일반 변수
: 특별한 제약이 없으며 대소문자의 구분만 명확히 하면 된다.
1.4. 스크립트 파일 작성 예
#!/bin/sh
echo "This Script Executable File : $0"
echo "Argument Count : $#"
echo "Process ID : $$"
echo "Argument List \$* : $*"
echo "Argument List \$@ : $@"
echo "Argument 1 : $1"
echo "Argument 2 : $2"
-->실행
$chmod 755 argument (or chmod a+x argument)
$./test a1 a2
(파일로 작성하지 않고, 쉘에서 한 줄씩 커맨드 날려보며 확인해도 됨!)
2. 조건문, 제어 구조
2.1. test, []
: 쉘 스크립트에서 참거짓 값을 판단할 수 있는 것은 test와 []로 보통 같은 의미를 지닌다.
: []명령어는 쉘 스크립트를 다른 프로그래밍 언어와 비슷하게 보이는 역할을 하기도 한다.
2.2. if
2.2.1. 형식1(단일 if문)
if [조건]
then
문장
fi
2.2.2. 형식2(if~else문)
if [조건]
if [조건]
2.3. for
: 지정한 범위 안에서 루프를 돌리는 데 사용한다.
: 범위에 사용되는 값은 어떠한 문자열의 집합이라도 가능하다.
: 루프가 돌 때마다 값1, 값2가 차례로 들어간다.
for 변수 in 값1, 값2 ...
do
문장
done
2.4. while
: 어떤 명령을 지정한 횟수만큼 실행시키기에는 부적합한 for루프를 보완
: 실행 횟수가 불확실할 때 편리하다.
while 조건문
do
문장
done
: 쉘 스크립트에서 참거짓 값을 판단할 수 있는 것은 test와 []로 보통 같은 의미를 지닌다.
: []명령어는 쉘 스크립트를 다른 프로그래밍 언어와 비슷하게 보이는 역할을 하기도 한다.
2.2. if
2.2.1. 형식1(단일 if문)
if [조건]
then
문장
fi
2.2.2. 형식2(if~else문)
if [조건]
then
문장
else
문장
fi
2.2.3. 형식3(여러가지 조건 검사)if [조건]
then
문장
elif [조건]
then
문장
else
문장
fi
: 지정한 범위 안에서 루프를 돌리는 데 사용한다.
: 범위에 사용되는 값은 어떠한 문자열의 집합이라도 가능하다.
: 루프가 돌 때마다 값1, 값2가 차례로 들어간다.
for 변수 in 값1, 값2 ...
do
문장
done
2.4. while
: 어떤 명령을 지정한 횟수만큼 실행시키기에는 부적합한 for루프를 보완
: 실행 횟수가 불확실할 때 편리하다.
while 조건문
do
문장
done
2.5. until
: while과 비슷하나 조건이 참일 동안 실행되는 것이 아니라 거짓일 동안 실행된다.
until 조건문
do
문장
done
2.6. select
: 원하는 리스트를 출력하고 그 중 선택된 것을 돌려준다.
: select 루프 내에서 자동으로 벗어날 수 없으므로 반드시 break문을 사용해야 한다.
: 스크립트 작성 예
#!/bin/sh
echo "What do you like?"
select var in "Linux" "Windows9x" "Win2k" "Win31" "Exit"
do
if [ "$var" = "Linux" ]; then
echo "You are a Linuxer!!!"
exit 0
elif [ "$var" = "Exit" ]; then
echo "The question ended"
exit 1
else
echo "$var is not the best way!!!"
echo "What do you like?"
fi
done
--> 결과 : What do you like?
1) Linux
2) Windows9x
3) Win2k
4) Win31
5) Exit
#?
2.7. case
: 여러 패턴을 검사하고 이에 적절한 구문을 실행시켜 주는 것으로 강력한 기능을 갖고 있으며 쉘 스크립트에 많이 등장한다.
case 변수 in
패턴 [|패턴]...) 문장;
패턴 [|패턴]...) 문장;
...
esac
: while과 비슷하나 조건이 참일 동안 실행되는 것이 아니라 거짓일 동안 실행된다.
until 조건문
do
문장
done
2.6. select
: 원하는 리스트를 출력하고 그 중 선택된 것을 돌려준다.
: select 루프 내에서 자동으로 벗어날 수 없으므로 반드시 break문을 사용해야 한다.
: 스크립트 작성 예
#!/bin/sh
echo "What do you like?"
select var in "Linux" "Windows9x" "Win2k" "Win31" "Exit"
do
if [ "$var" = "Linux" ]; then
echo "You are a Linuxer!!!"
exit 0
elif [ "$var" = "Exit" ]; then
echo "The question ended"
exit 1
else
echo "$var is not the best way!!!"
echo "What do you like?"
fi
done
--> 결과 : What do you like?
1) Linux
2) Windows9x
3) Win2k
4) Win31
5) Exit
#?
2.7. case
: 여러 패턴을 검사하고 이에 적절한 구문을 실행시켜 주는 것으로 강력한 기능을 갖고 있으며 쉘 스크립트에 많이 등장한다.
case 변수 in
패턴 [|패턴]...) 문장;
패턴 [|패턴]...) 문장;
...
esac
3. 목록
: 여러 명령어를 실행할 때 앞의 명령의 결과에 의해서 다음 행동이 결정되어야 할 경우 AND나 OR조건을 사용해서 한 번에 처리할 수 있다.
: 쉘 스크립트 뿐 아니라 명령행에서도 사용 가능하다.
: 여러 명령어를 실행할 때 앞의 명령의 결과에 의해서 다음 행동이 결정되어야 할 경우 AND나 OR조건을 사용해서 한 번에 처리할 수 있다.
: 쉘 스크립트 뿐 아니라 명령행에서도 사용 가능하다.
4. 함수
5. 명령어
6. 명령 실행
7. 쉘 스크립트 내부에서 입력 전달(Here Documents)
댓글 없음:
댓글 쓰기