쉘 스크립트 맛보기

2022. 12. 20. 20:54Linux

쉘(Shell)

  • 운영체제상에서 사용자가 입력하는 명령을 읽고 해석하여 대신 실행시켜주는 프로그램이다.
  • 사용자의 명령어를 해석하여 운영체제가 알아듣게 도와주는 명령어 해석기.

 

쉘 스크립트(Shell Script)

  • 쉘에서 사용하는 명령어들을 조합해 만든 배치(batch)파일
    • 배치파일이란 2줄 이상의 명령을 실행할 수 있는 파일을 말합니다.

쉘 스크립트 만드는법

 

파일편집기로 파일을 하나 만듭니다.

# vi if_1

그 후 파일 맨위에 #!/bin/bash 를 입력합니다.

아래에는 내용을 대략 써준 뒤, 

#!/bin/bash

A=40

if (( $A > 30 ))
then
        echo "samadal"
else
        echo "madal"
fi

 

실행권한을 주면 완성됩니다.

[root@localhost samadal]# ls -l if_1
-rwx------ 1 root root 78 12월 20 19:52 if_1

 

그 후 실행하려면 파일의 경로까지 지정해줘야 합니다.

[root@localhost samadal]# if_1
bash: if_1: 명령을 찾을 수 없습니다...
[root@localhost samadal]# ./if_1
samadal

 

파일의 경로를 지정해주고 싶지 않다면 환경변수에 파일의 경로를 추가해주면 됩니다.

[root@localhost samadal]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/bash
[root@localhost samadal]# PATH=$PATH:/home/samadal
[root@localhost samadal]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/bash:/home/samadal
[root@localhost samadal]# if_1
samadal

 


여러 문법

 

변수

스크립트로도 c언어처럼 변수를 사용할 수 있습니다.

 

[root@localhost samadal]# vi Variable.bash
#!/bin/bash

VAL=17

echo $VAL
echo 17
[root@localhost samadal]# chmod u+x Variable.bash
[root@localhost samadal]# Variable.bash
17
17
[root@localhost samadal]#

VAL의 값이 대입해준 17과 일치하는 것을 알 수 있습니다.

우리는 이 변수로 값들을 저장해뒀다가 필요할 때 꺼내 사용할 수 있습니다.


if문

 

[root@localhost samadal]# vi if_1.bash
#!/bin/bash

A=40
echo "A=$A"

if (( $A > 30 ))
then
        echo "IF"
else
        echo "ELSE"
fi

if (( $A == 30 ))
then
        echo "IF"
else
        echo "ELSE"
fi

if (( $A != 30 ))
then
        echo "IF"
else
        echo "ELSE"
fi

c="left"
d="right"
e="left"

echo "((left right))"

if (( $c == $d ))
then
        echo "IF"
else
        echo "ELSE"
fi

if (( $c == $e ))
then
        echo "IF"
else
        echo "ELSE"
fi


echo "[[ left right ]]"

if [[ $c == $d ]]
then
        echo "IF"
else
        echo "ELSE"
fi

if [[ $c == $e ]]
then
        echo "IF"
else
        echo "ELSE"
fi
[root@localhost samadal]# if_1.bash
A=40
IF
ELSE
IF
((left right))
IF
IF
[[ left right ]]
ELSE
IF
[root@localhost samadal]#

left right 의 문자열 비교 부분에서 보이듯이 (( )) 소괄호 일경우에는 결과가 제대로 나오지 않는 것을 알 수 있다.

따라서 문자열 비교 시는 [대괄호], 숫자 비교 시에는 (소괄호)로 if문을 감싸 주어야 한다.

 


for문

 

#!/bin/bash

for i in A B C D E
do
        echo $i
done

echo "=============="

list="F G H I J K"
for var in $list
do
        echo $var
done

echo "============="

array=(1 3 5 7 9)
for i in "${array[@]}"
do
        echo $i
done

echo "============="

for i in {1..5}
do
        echo $i
done

echo "============="

for i in {0..10..2}
do
        echo $i
done

echo "============="

for i in {10..0..-2}
do
        echo $i
done

echo "============="

for (( i=0;i<5;i++ ))
do
        echo $i
done
[root@localhost samadal]# for_1.bash
A
B
C
D
E
==============
F
G
H
I
J
K
=============
1
3
5
7
9
=============
1
2
3
4
5
=============
0
2
4
6
8
10
=============
10
8
6
4
2
0
=============
0
1
2
3
4
[root@localhost samadal]#

입력

 

쉘에서는 read 키워드를 통해 변수에 값을 입력받을 수 있습니다.

#!/bin/bash

echo start

read HI

echo $HI

echo end

 

[root@localhost samadal]# ./read.bash
start

실행하면 start에서 입력을 기다리고 있습니다.

 

[root@localhost samadal]# ./read.bash
start
itbank

itbank 입력하고 엔터까지 쳐보겠습니다.

 

[root@localhost samadal]# ./read.bash
start
itbank
itbank
end
[root@localhost samadal]#

잘 출력이 되는 모습입니다.


명심할 것

 

문법 시에 왠만한 것들은 공백으로 띄워줍니다.

다만 대입은 띄워주지 않습니다.

'Linux' 카테고리의 다른 글

crontab  (13) 2022.12.20
리눅스 명령어 grep, awk, sed  (7) 2022.12.19
1214수업, 리눅스xe복습, 윈도우관리,  (3) 2022.12.14
1213수업. httpd, xe설치  (3) 2022.12.13
14. 프로세스  (3) 2022.09.25