쉘 스크립트 맛보기
2022. 12. 20. 20:54ㆍLinux
쉘(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 |