2004. 7. 18. 21:45
기술문서창고/리눅스 프로그래밍
변수
기본적으로 모든 변수는 숫자값을 가지는 경우에도 스트링으로 간주, 필요에 따라 적절히 숫자로 인식할 것이다. 또한 대소문자를 구분하며 변수에 값을 부여할 때를 제외하고는 변수 앞에 $ 문자를 추가할 필요가 있다. 또한 스트링에 빈 칸이 포함된다면 큰 따옴표를 사용해야 한다. 그리고 값을 부여시 등호 양쪽에 빈칸이 없어야 한다.
파라미터 변수
조건
test와 [] - 조건이 만족되었는지의 여부를 가리키는 test 명령의 종료코드는 조건적인 코드가 실행되었는지를 결정한다.
스트링비교
프로그램 제어
if - 예문 하나로 설명 끝.
기본적으로 모든 변수는 숫자값을 가지는 경우에도 스트링으로 간주, 필요에 따라 적절히 숫자로 인식할 것이다. 또한 대소문자를 구분하며 변수에 값을 부여할 때를 제외하고는 변수 앞에 $ 문자를 추가할 필요가 있다. 또한 스트링에 빈 칸이 포함된다면 큰 따옴표를 사용해야 한다. 그리고 값을 부여시 등호 양쪽에 빈칸이 없어야 한다.
[CODE]#!/bin/sh
myvar="Hi rhere"
echo $myvar
echo "$myvar"
echo '$myvar'
echo $myvar
echo Enter some text
read myvar
echo '$myvar' now equals $myvar
exit 0[/CODE]
환경변수 - 쉘 스크립트가 시작될 때 초기화되는 환경의 값들을 가진 변수.[CODE]$HOME 현재 사용자의 홈 디렉토리
$PATH 명령을 검색하는 디렉토리들의 목록. 콜론으로 구분
$PS1 대개 $인 명령 프롬프트
$PS2 추가적인 입력을 요구할 때 사용되는 2차 프롬프트. 대개 >
$IFS 입력필드구분자. 쉘이 입력을 받아들일 때 단어를 구분하는
데 사용하는 문자의 목록으로, 대개 빈 칸, 탭, 새 줄
문자이다.
$0 쉘 스크립트의 이름
$# 전달된 파라미터의 수
$$ /tmp/tmpfile_$$와 같이 종종 독특한 임시 파일 이름을
생성하기 위해 스크립트에서 사용하는 쉘 스크립트의
프로세스 ID[/CODE]
파라미터 변수
[CODE]$1, $2, ... 스크립트에 주어진 파라미터
$* 환경 변수 IFS의 첫 문자로 구분되고, 하나의 변수에 저장되는
모든 파라미터의 목록
$@ IFS 환경 변수를 사용하지 않는 $*에 대한 변형 [/CODE]
조건
test와 [] - 조건이 만족되었는지의 여부를 가리키는 test 명령의 종료코드는 조건적인 코드가 실행되었는지를 결정한다.
if test -f fred.c
then
...
fi
위와 같은 뜻..then
...
fi
if [ -f fred.c ]; then
...
fi
...
fi
[]와 테스트되는 조건 사이에 빈칸이 추가되어야 한다.
스트링비교
string1 = string2 두 스트링이 같으면 참
string1 != string2 두 스트링이 같지 않으면 참
-n string 두 스트링이 널이 아니면 참
-z string 두 스트링이 널(빈 스트링)이면 참
산술비교string1 != string2 두 스트링이 같지 않으면 참
-n string 두 스트링이 널이 아니면 참
-z string 두 스트링이 널(빈 스트링)이면 참
ex1 -eq ex2 두 수식이 같으면 참
ex1 -ne ex2 두 수식이 같지 않으면 참
ex1 -gt ex2 ex1이 ex2보다 크면 참
ex1 -ge ex2 ex1이 ex2보다 크거나 같으면 참
ex1 -lt ex2 ex1이 ex2보다 작으면 참
ex1 -le ex2 ex1이 ex2보다 작거나 같으면 참
! exp 두 수식이 거짓이라면 참 (또는 그 반대)
파일 조건ex1 -ne ex2 두 수식이 같지 않으면 참
ex1 -gt ex2 ex1이 ex2보다 크면 참
ex1 -ge ex2 ex1이 ex2보다 크거나 같으면 참
ex1 -lt ex2 ex1이 ex2보다 작으면 참
ex1 -le ex2 ex1이 ex2보다 작거나 같으면 참
! exp 두 수식이 거짓이라면 참 (또는 그 반대)
-d file 파일이 디렉토리면 참
-f file 파일이 파일이면 참 ( -e 대용으로도 많이 쓰인다. )
-e file 파일이 존재하면 참
-r file 파일이 읽기가능하면 참
-w file 파일이 쓰기가능이면 참
-x file 파일이 실행가능이면 참
-g file 파일에 set-group-id가 설정되면 참
-u file 파일에 set-user-id가 설정되면 참
-f file 파일이 파일이면 참 ( -e 대용으로도 많이 쓰인다. )
-e file 파일이 존재하면 참
-r file 파일이 읽기가능하면 참
-w file 파일이 쓰기가능이면 참
-x file 파일이 실행가능이면 참
-g file 파일에 set-group-id가 설정되면 참
-u file 파일에 set-user-id가 설정되면 참
프로그램 제어
if - 예문 하나로 설명 끝.
[CODE]#!/bin/sh
echo " Is it mornig? Please answer yes or no"
read timeofday
if [ "$timeofday" = "yes" ]; then
echo "Good morning"
elif [ "$timeofday" = "no" ]; then
echo "Good afternoon"
else
echo "Sorry, $timeofday not recognized. Enter yes or no"
exit 1
fi
exit 0[/CODE]
[ $timeofday = "no" ] 식으로 표현할 경우 변수값이 null 이면 [ = "no" ] 식이 되버려 에러가 발생하므로 "$timeofday" 라고 표현해주어야 한다.
forfor variable in values
do
statements
done
예do
statements
done
[CODE]#!/bin/sh
for file in $(ls f*.sh); do
echo $file
done
exit 0[/CODE]
whilewhile condition
do
statements
done
예do
statements
done
[CODE]#!/bin/sh
foo=1
while [ "$foo" -le 20 ]
do
echo "$foo Here we go again"
foo=$(($foo+1))
done
exit 0[/CODE]
until[CODE]until condition
do
statements
done[/CODE]
예[CODE]#!/bin/bash
until who | grep "$1" > /dev/null
do
sleep 60
done
# 경고음을 내고 사용자에게 알려준다.
echo -e \a
echo "*** $1 has just logged in ***"
exit 0[/CODE]
case[CODE]case var in
pattern [ | pattern ] ...) statements;;
pattern [ | pattern ] ...) statements;;
...
esac[/CODE]
예[CODE]#!/bin/bash
echo "Is it morning? Please answer yes or no"
read timeofday
case "$timeofday" in
[yY] | [yY][eE][sS] ) echo "Good Morning";;
[nN] | [nN][oO] ) echo "Good Afternoon";;
* ) echo "Sorry, answer not recognized"
exit 1;;
esac
exit 0[/CODE]