1. 큰 따옴표는 변수 값으로 치환되고 작은 따옴표는 변수명 자체를 출력
# message="Hello" (등호 사이에 공백이 없어야 함)
# echo "$message"
Hello
# echo '$message'
$message
2. 큰 따옴표 안에 $를 문자로 쓰고 싶으면 \ 를 사용
# echo "\$message = $message"
$message = Hello
3. 큰 따옴표 안에 변수명과 다른 문자를 계속 적을 경우에는 변수명을 {} 로 감쐄
# echo "${message}Word"
HelloWord
4. 큰 따옴표 안에 큰 따옴표를 사용할려면 \를 사용
# echo "Hello \"World\""
Hello "World"
5. 작은 따옴표안에 작은 따옴표는 사용할 수 없으나 다음과 같이 사용은 가능
# echo 'Hello '\''World'\'
Hello 'World'
'Hello ' + \' + 'World' + \' 와 같은 의미임
6. 큰 따옴표 없이 변수만 사용할 때 변수 값에 * ? 등 와일드카드가 있으면 파일명을 표시, 일치하는 파일명이 없으면 그대로 표시
# touch HelloWorld.txt
# message="Hello*"
# echo $message
HelloWorld.txt
# rm HelloWorld.txt
# echo $message
Hello*
7. 조건식
[[ 조건식 ]] 으로 조건 판별
-z 문자열 : 빈문자열
-n 문자열 : 빈문자열 아님
문자열 == 문자열 : 문자열 패턴 일치 (= 도 같은 의미)
문자열 != 문자열 : 문자열 패턴이 일치하지 않음
-e 파일명 : 파일이 존재함
-d 파일명 : 디렉토리
-h 파일명 : 심볼릭 링크
-f 파일명 : 일반 파일
조건1 && 조건2 : 모두 true
조건1 || 조건2 : 둘 중 하나만 true
!조건1 : 조건이 성립하지 않음
true : 언제나 성립
false : 언제나 성립하지 않음
0 : true
0 이외의 값 : false
#! /bin/sh
message="Hello"
if [[ $message == "Hello" ]]; then
echo "Hello World"
fi
8. 커맨드 값
커맨드 리턴값 0 : true
커맨드 리턴값 0 이외의 값 : false
$? : 바로 이전에 실행한 커맨드의 리턴값
if grep "Hello" /tmp/tmp0 >/dev/null 2>&1; then # grep 에 매칭하는 문자가 있으면 0 을 리턴 true
echo "Hello World"
if
grep "Hello" /tmp/tmp0 >/dev/null 2>&1
rc=$?
if [[ $rc -eg 0 ]]; then
echo "Hello World"
if
9. 배열
{} : 배열 참조
{#} : 배열의 갯수
@ : 배열을 나열
$0 : 쉘스크립트 명령어
$1~$9 : 쉘스크립트의 인수 참조
$@ : 쉘스크립트 명령어 포함 모든 인수 나열
shift : 쉘스크립트 인수를 shift 지정한 횟수만큼 shift 한다.
파일명 : params.sh
#! /bin/sh
# fruits[0]="Apple"
# fruits[1]="Grape"
# fruits[2]="Orange"
# echo "${fruits[0]}" "${fruits[1]}" "${fruits[2]}"
Apple Grape Orange
# fruits=( "Apple" "Grape" "Orange" )
# echo "${fruits[0]}" "${fruits[1]}" "${fruits[2]}"
Apple Grape Orange
# echo "${#fruits[@]}"
3
# echo "${fruits[@]}}"
Apple Grape Orange
# echo $0
for item in "$@"; do
echo $item
done
while [[ "$@" != "" ]]; do
echo "$@"
shift
done
10. 커맨드 치환과 수치연상
$() : 커맨드를 출력 결과
$(()) : 수치 연산
# message="sh 의 경로는 $(which sh) 입니다."
# ehco $message
sh 의 경로는 /bin/sh 입니다.
11. 서버 리스트의 free 메모리 보기
파일명 : servers.txt
root@server01.com
root@server02.com
root@server03.com
파일명 : servers.sh
#! /bin/sh
file=$1
shift
while read server; do
ssh -n "$server" "$@" 2>$1 | sed "s/^/$server: /" &
done <"$file"
wait
# ./servers.sh servers.txt free