if [ ! "$name" ]
result=$(grep $name phonebook)
if [ "result" ]
echo "$name $tel" >> phonebook
grep -v "$name" phonebook > /tmp/phonebook
mv /tmp/phonebook phonebook
쉘 스크립트는 타입이 존재하지 않으며 사용되는 모든 데이터는 기본적으로 문자열로 처리됨
변수를 사용하려면 반드시 달러 기호를 사용해야 하며 변수를 선언할 때는 달러 기호를 사용하면 안됨
쉘 스크립트 작성법
#!/bin/bash 해시뱅과 스크립터를 실행할 인터프리터 명시해야 함
read -p "name: " name //// 변수이름 안적을 시 $REPLY 내장 변수에 자동 저장
산술연산
변수에 저장된 값은 기본적으로 문자열이므로 산술 연산을 위한 별도의 문법이 필요
정수 연산을 하려면 먼저 정수형 변수를 선언해야 한다.
정수형 변수를 선언하는 명령어는
1 declare -i, 2 let
result="5 + 5" "큰 따옴표를 사용하면 공백은 분리자로 사용되지 않으므로 사용 가능"
동등 비교를 제외한 나머지 연산자에 대해서는 반드시 백슬래시나 따옴표를 사용해야 한다.
=>리다이렉션 연산자로 인식되지 않게 하기 위하여 필요함
let ret=2\>0
let "ret = 2 <= 0"
bash는 계산을 조금 더 쉽게 처리할 수 있도록 3가지 방법을 제공
1. expr
2. []
3. (( ))
expr
result=$(expr 2 + 2)
rsult=$(expr $val1 \* $val2)
[ ] - expr과 차이점은 소괄호 -> 대괄호, expr 안쓴다는 것, 대괄호 안 변수는 달러, 리다이렉트 할 때 \안붙여도 된다.
result=$[2 * 2]
result=$[2 ** 4]
var1=2
var2=2
result=$[var1 * var2]
echo $[var1 > var2] #0
(( ))
산술 연산을 위한 전용 문법으로 문자열은 다루지 않고 오직 숫자만 처리함
따라서 이중 소괄호 안에 알파벳으로 된 단어가 나타나게 되면 쉘은 이를 변수로 해석하며 이러한 특징 때문에 이중 소괄호 안에서 변수를 사용할 경우, $ 문자를 사용하지 않아도 됨
큰 따옴표나 작은 따옴표를 사용할 수 없음
num=0
((num = num + 1))
((num += 1))
((++num))
((num = 2 ** 10))
((ret = 10 > 1))
((ret = 10>= 1))
치환-----
문자열 길이 계산
${#변수}
---------분기문
if [ expression ]
중요한점 : 괄호의 앞과 뒤에는 공백이 있어야 함
if [ $REPLY -eq 0 ] ; then
fi
if [ $REPLY -gt 0 ]; then
elif [ ]; then
else
fi
산술명령식
: 연산 수행을 편리하게 함
if (( (($REPLY % 2)) == 0 )); then
else
fi
합성 명령어
사용방법 : [[ expression ]]
if [[ ! "$REPLY" =~ ^-?[0-9]+$ ]]; then
fi
case $REPLY in
0)
exit;;
1)
break
2)
*)
반복문
while true; do
done
until (( i > 5 )); do
done
for i in 1 2 3 4 5 6 7 8 9; do
done
for (( i=0l i<5; i++ )); do
done
배열
arr1=(1024 "one" $(pwd) $USER)
arr3[0]="zero"
arr3[1]="one"
arr3[2]="two"
원소 참조 방법 : ${name[index]}
함수
print_world(){
echo "hello"
return
}
print_world
함수 사용시 전달된 값이 순서대로 저장됨
echo $1 $2 $3
매개 변수를 반복적으로 처리하기 위해 shift 명령어를 제공
shift 명령은 위치 매개변수의 전체 값들을 하나씩 왼쪽으로 이동시키는 명령
댓글