오늘은 쉘 스크립트 기초 문법에 대한 블로그를 작성해보겠습니다...옛날에 찍먹으로 배워서 까먹었는데 이것이 리눅스다 책과 검색을 통해 복습했습니다..
반복적인 작업을 수동으로 수행하는 것은 시간이 많이 걸리고 실수를 유발할 수 있습니다. 이러한 문제를 해결하는 강력한 도구 중 하나가 바로 쉘 스크립트입니다. 쉘 스크립트는 시스템의 다양한 작업을 자동화하고, 복잡한 명령어를 간편하게 실행할 수 있게 도와주는 도구입니다.
- 리눅스는 대부분 C언어로 작성했기 때문에 C언어와 유사한 방법으로 프로그래밍 가능
- 일반 프로그래밍 언어와 비슷하게 변수, 반복문, 제어문 등 사용 가능
- 별도의 컴파일 과정 필요 없이 바로 셸에서 실행 가능
- 주로 vi eitor나 gedit으로 작성
실행 방법
sh
명령어sh {scriptFileName}.sh
- 실행 가능한 속성으로 변경한 후 실행
chmod
로 x(실행) 권한 부여한 후./{scriptFileName}.sh
- 참고로 ./를 쓰는 이유는 현재 디렉토리가 $PATH 환경변수에 설정되어 있지 않기 때문, 등록되어 있으면 생략 가능
기초 문법
- 특별한 형태의 주석(#!)으로 첫 행에 꼭 아래의 행을 써줘야 함
#!/bin/bash
- 변수
- 셸 스크립트에서는 변수를 사용하기 전에 미리 선언 X, 값이 할당되면 자동으로 변수가 생성된다
- 변수는
${variableName}
으로 사용 가능 - 변수에 넣는 모든 값은 문자열(String)으로 취급
- 변수 이름은 대소문자 구분함
- 변수에 값 대입할 때 ‘=’ 좌우에 공백이 없어야 함
- ‘
$
’가 들어간 글자를 출력하려면 ‘’로 묶어주거나 ‘\
’(escape 문자)를 넣어줘야함
test=Hello
test2="HELLO"
echo $test
echo $test2
echo "$test"
echo '$test'
echo \$test
Hello
HELLO
Hello
$test
$test
- 숫자 계산
- 변수에 모든 값을 문자열로 취급하기 때문에 +, -, *, / 등 숫자 연산을 하려면
expr
키워드를 사용해야 함 - 수식과 함께 꼭 ```로 묶어줘야 함
- 연산자와 피연산자 사이에 반드시 공백이 있어야 합
- 수식에 괄호와 *( 곱하기)를 사용하려면 ‘
\
’를 붙여줘야함 expr
대신$(( ... ))
구문을 사용하는 것이 더 쉽고 직관적- 이 구문은 산술연산을 위한 것이므로 안에 escape 문자 필요 없음
- 변수에 모든 값을 문자열로 취급하기 때문에 +, -, *, / 등 숫자 연산을 하려면
#!/biin/sh
num1=10
num2=20
num3=2
result1=$num1+$num2
result2=`expr $num1 + $num2`
echo "result1 = $result1"
echo "result2 = $result2"
result3=`expr \( $num1 + $num2 \) / $num3 + 100`
echo "result3 = $result3"
result4=$(( $num1 + $num2 * $num3))
echo "result4 = $result4"
result5=`expr \( $num1 + $num2 \* $num3 \)`
echo "result5 = $result5"
exit 0
result1 = 10+20
result2 = 30
result3 = 115
result4 = 50
result5 = 50
- 파라미터 변수
- 파라미터 변수는
$0
,$1
,$2
… 등의 형태를 가짐- ex)
yum -y install gftp
→$0
: yum ,$1
: -y,$2
: install,$3
: gftp,$*
: 전체 변수
- ex)
- 파라미터 변수는
#!/bin/bash
echo "Script File name is $0"
echo "Parameter is $1"
exit 0
~$ sh test.sh temp.txt
Script File name is test.sh
Parameter is temp.txt
- if~else문
- 기본 문법 구조는 다음과 같음
if [ condition ] then [ when condition is true ] elif [ condition2 ] then [when conditon2 is true ] else [ when condition and condition2 is false ] fi
[ ]
안에 공백 필수- 조건문은
fi
로 종료 if [ condition ]; then
형식으로 한 줄에 작성할 때는;
가 필요- 조건문에 들어가는 비교 연산자
- 문자열 비교 연산
- ‘
=
’, ‘≠
’ -n “string1”
: 문자열이 NULL이 아니면 참-z “string2”
: 문자열이 NULL이면 참
- ‘
- 산술 비교 연산
$num1 -eq $num2
: 수식이 같으면 참$num1 -ne $num2
: 수식이 다르면 참$num1 -gt $num2
: 왼쪽 수식이 더 크면 참$num1 -ge $num2
: 왼쪽 수식이 더 크거나 같으면 참$num1 -lt $num2
: 왼쪽 수식이 작으면 참$num1 -le $num2
: 왼쪽 수식이 작거나 같으면 참!{수식}
: 수식이 거짓이면 참
- 문자열 비교 연산
- 파일과 관련된 조건
-d
: 파일이 디렉토리면 참-e
: 파일이 존재하면 참-f
: 파일이 일반 파일이면 참-g
: 파일에 set-group-id가 설정되면 참-r
: 파일이 읽기 가능이면 참-s
: 파일의 크기가 0이 아니면 참-u
: 파일에 set-user-id가 설정되면 참-w
: 파일이 쓰기 가능 상태이면 참-x
: 파일이 실행 가능 상태이면 참
- case~esac
- 여러 케이스 처리, 다중 분기
- 맨 뒤에
;;
붙혀야함
#!/bin/bash
echo "Y/N ? "
read PARAM
case "$PARAM" in
Y)
echo "YES";;
N)
echo "NO";;
*)
echo "What?";;
esac
exit 0
$ sh test.sh
Y/N ?
Y
YES
$ sh test.sh
Y/N ?
N
NO
$ sh test.sh
Y/N ?
?
What?
- for~in문
- 기본 구조
- for variable in var1, var2, var3... do # do done
- 기존의 for문과 동일하게 i=0; i<10; i++ 이런 식으로 사용 가능
#!/bin/bash
sum=0
for i in 1 2 3 4 5 6 7 8 9 10
do
sum= $((sum + i))
done
echo "sum is $sum" exit 0
- while문
- 조건식이 참인 동안 계속 바복
- 1 또는 :이 오면 항상 참 → 무한 반복
- 기본 구조
#!/bin/bash
sum=0
i=1
while [ $i -l 10 ]
do
sum=$((sum+i))
read i
done
echo "sum is $sum"
exit 0
- eval
- 문자열을 명령문으로 인식하고 실행
#!/bin/bash
str="ls -l"
echo $str
eval $str
exit 0
'시스템 > Linux' 카테고리의 다른 글
[Linux] 파일 검색 및 조작 명령어 (0) | 2024.08.27 |
---|---|
[Linux] 사용자 및 그룹 관리 (0) | 2024.08.22 |