매직넘버 : 스크립트의 첫줄 첫 캐릭터가 #!일 경우 이후 경로에 있는 쉘로 아래 내용을 해석한다.
-> #!/bin/bash = 커널이 아래 내용을 bash 쉘로 해석한다.
1. 입/출력
1) echo : 입력받은 내용을 출력함.
예제1)
#!/bin/bash
echo "Todays date and time : "
date
[root@linux200 ~/bin]# echo.sh
Todays date and time :
2021. 05. 05. (수) 03:41:29 KST
예제2)
#!/bin/bash
echo -n "Todays date and time : "
date
[root@linux200 ~/bin]# echo.sh
Todays date and time : 2021. 05. 05. (수) 03:41:29 KST
* echo -n : 개행문자를 무시하는 옵션, 즉 문장의 끝에 바로 이어서 내용을 출력할 수 있게 함
2) read : 입력받은 내용을 변수로 선언함.
예제1)
#!/bin/bash
echo -n " What your name? : "
read FNAME
echo $FNAME
[root@linux200 ~/bin]# read.sh
What your name? : park je hyen
park je hyen
예제2)
#!/bin/bash
echo -n " What your name? : "
read FNAME MNAME LNAME
echo $FNAME $MNAME
[root@linux200 ~/bin]# read.sh
What your name? : park je hyen
park je
예제3)
#!/bin/bash
echo -n " What your name? : "
read FNAME MNAME
echo $FNAME $MNAME
[root@linux200 ~/bin]# read.sh
What your name? : park je hyen
park je hyen
* 예제3 스크립트 처럼 hyen은 3번째 필드이나, MANE 이후에 입력된 내용임으로 NAME에 종속된다.
2. 숫자 다루기
1) expr : 연산을 실행함
expr 1 + 5 : 더하기
expr 5 - 1 : 뺴기
expr 3 \* 3 : 곱하기 ( *의 경우 별도 의미가 있기에 탈출문자와 함깨 쓰임)
expr 10 / 2 : 나누기
* 단 소숫점 이하 숫자는 출력되지 않는다, 간단한 스크립트를 지원함으로 그 이상의 기능은 다른 언어를 활용.
3. 조건문
0) test 명령어 ( test = [] )
식을 평가하고 그 식에 대한 논리값을 반환한다. 종료 상태가 0이면 참을 의미하고 0이 아니면 거짓을 의미한다. test 명령어와 [ ]는 같은 기능을 갖는다.
test 내의 참과 거짓을 구분하는 주요 연산자들이 있다.
1) 파일 관련 연산자
-d file | 파일이 존재하고 디렉토리인 경우 | -f file | 파일이 정규 파일인 경우 |
-r file | 파일이 존재하고, 읽을 수 있을 경우 | -x file | 파일이 존재하고, 쓰기 가능한 경우 |
-s file | 파일이 존재하고, 빈 파일이 아닌경우 |
2) 문자열 관련 연산자
A = B | A 문자가 B 문자와 같은경우 | A != B | A 문자가 B 문자와 같지않은 경우 |
-z A | A 문자의 길이가 0인경우 (NULL) | -n A | A 문자의 길이가 NULL이 아닌경우 |
3) 산술연산 관련 연산자
exprA -eq exprB | A연산과 B연산이 같은경우 | exprA -ne exprB | A연산과 B연산이 다른경우 |
exprA -lt exprB | A연산이 B연산보다 작은경우 | exprA -le exprB | A연산이 B연산과 작거나 같은경우 |
exprA -gt exprB | A연산이 B연산보다 큰경우 | exprA -ge exprB | A연산이 B연산과 크거나 같은경우 |
* 산술연산 시 소숫점 아래 숫자는 무시한다.
1) if 구문 ( if ~ then ~ fi )
내용이 참일경우와 아닐경우를 나눠서 원하는 값을 출력한다.
예제1)
#!/bin/bash
echo -n " Enter Your Filename : "
read FILE1
if [ -x $FILE1 ] ; then
. $FILE1
else
echo " chack execute permission. "
exit 1
fi
예제2)
#!/bin/bash
echo -n " Enter Your Filename? : "
read FILE1
if test -d $FILE1 ; then
echo " this file is directoty file ! "
elif test -f $FILE1 ; then
echo " this file is regular file ! "
else
echo " this file is other type file ! "
fi
예제1) if 구문의 경우 위에서 배운 test 으로 조건을 구성하거나 CMD 로 조건을 구성한다. (위 내용은 [] 로 구성)
then 이후 내용은 참인경우 값 else 이후의 값은 거짓일 경우의 값, 마지막은 fi 를 통해 구문을 완성한다.
예제2) 위 구문과 동일하나, elif 의 경우 추가적인 조건을 추가할 수 있는 구문이다.
1-1) 인자 처리 구문. ( $#, $0 ... )
예제1)
#!/bin/bash
if [ $# -ne 1 ] ; then
echo "Usage: $0 <filename>"
exit 1
fi
FILE1=$1
FILESIZE=$(wc -c < $FILE1)
#echo $FILESIZE
if [ $FILESIZE -ge 5120 ] ; then
echo " $FILE1 is a big file ! - $FILESIZE"
else
echo " $FILE1 is a small file ! - $FILESIZE"
fi
조건 내용에 인자값으로 구성할 수 도 있다.
1-2) 변수가 비어있을 경우
예제1)
#!/bin/bash
VAR='hello world'
if [ "X$VAR" = "X" ] ; then
echo "VAR 변수는 비어있엉 ㅋㅋ루삥빵뽕 "
else
echo "VAR 변수는 값이있넹.. ㅋㅋ루삥뽕 "
fi
예제2)
#!/bin/bash
VAR=
if [ "X$VAR" = "X" ] ; then
echo "VAR 변수는 비어있엉 ㅋㅋ루삥빵뽕 "
else
echo "VAR 변수는 값이있넹.. ㅋㅋ루삥뽕 "
fi
예제1) 의 경우 if [ x'hello world' = x ] ; then 으로 조건이 붙음, 그럼으로 거짓값이 출력됨.
예제2) 의 경우 if [ x = x ] ; then 으로 조건이 붙음, 그럼으로 참값이 출력됨.
'모의해킹 침해대응 과정 > 본 과정' 카테고리의 다른 글
쉘 프로그래밍(bash)_3 / day31 (0) | 2021.05.10 |
---|---|
쉘 프로그래밍(bash)_2 / day30 (0) | 2021.05.07 |
쉘 프로그래밍(bash)_1 / day29 (0) | 2021.05.06 |
쉘 스크립트(bash)_2 / day29 (0) | 2021.05.04 |
쉘 스크립트(bash) / day28 (0) | 2021.05.04 |