Linux

Linux - ShellScript

hann-blume 2020. 3. 22. 13:39

 

 

 

ShellScript

 

- Shell이란 유닉스 리눅스 환경의 대화형 사용자 인터페이스를 말한다.
- 사용자가 입력하는 명령어를 이해하고, 실행하는 역할을 한다.
- 운영체계의 바깥 계층에 위치하며, 사용자와 커널의 의사소통을 담당.
- cshell, bourneshell, bashshell, tcshell, kornshell, 등 다양한 종류가 있다.

 

 

[ 지역 변수 ]
자신을 생성한 Shell에서만 사용할 수 있다.

 

지역변수 선언
# A="hann"
# declare B="HANN"

declare는 지역변수 선언을 의미


[ 환경 변수 ]
자신을 생성한 Shell뿐만 아니라, 이로부터 파생되어 나온 자식 프로세스에서도 사용할 수 있다.

 

환경변수 선언
# export NAME="Kim Tistory"
# declare -x TEST="Shell"   (-x 를 붙이면 declare도 환경변수가 된다.)

 

 

[ 변수 명칭 표준 ]
변수 이름에는 알파벳 “a~z”, “A~Z”, “0~9”, 언더스코어( _ )로 이루어진 총 63개의 문자를
사용 할 수 있으며, 변수명의 첫 글자는 반드시 알파벳 혹은 밑줄문자 ( _ )이어야 한다.


[ 변수에 값 할당하기 ]
등호( = )를 사용하며, 등호( = ) 양쪽에는 공백이 올 수 없다

 

 

[ 출력 ]
# echo $A
# echo $B
# echo $NAME
# echo $TEST

환경변수 출력
env, printenv, export 등의 방법이 있다.
# export

 

스크립트 작성을 완료했으면 실행 파일로 만들어줘야한다.

x권한을 추가해주자.

# chmod +x ./test1.sh

 

스크립트 실행
# ./test1.sh

 

 

# SAVE=$PS1
# echo $SAVE
[\u@\h \W]\$        이정보는  PS1이라는 시스템환경변수에 저장된 내용이며
[root@localhost] #   이걸 의미

변경해보기
# PS1="[\T]$SAVE"

다시 복구
# PS1=$SAVE



# var1="Hello Shell"
# var2="Hello"

# echo $var1
# echo "$var1"

쌍따옴표를 한것과 안한것의 출력결과는 같다.
홑따옴표를 사용하면
# echo '$var1'
홑따옴표안의 내용을 그대로 출력. 즉 일반문자 취급을 하게된다.

 

 

 

 

 

 

 

배열만들기
# vi ./arr.sh

#!/bin/bash
arr=("Kim" "Jun" "Hyun")
echo ${#arr[@]} 배열 전체 출력  @는 배열전체를 뜻한다.

#을 붙이면 요소 개수를 출력하라는 의미.


printf "val=%s\n" "${arr[@]}"   배열을 출력하는 문장. @는 전체를 출력.

@대신에 인덱스번호를 입력하면 해당
인덱스자리 출력.


VAL[0]="TEST1"
VAL[1]="TEST2"
VAL[2]="TEST3"
echo ${VAL[0]}
echo ${VAL[1]}
echo ${VAL[2]}

저장하고 나와서
# chmod +x ./arr.sh
# ./arr.sh

 

 

Bash Shell Script 제어문 연산자

조건 설명
-d “디렉터리명” 디렉터리가 존재 할 경우 참
-e “파일명” 파일이 존재 할 경우 참
-f “파일명” 일반 파일 일 경우 참
-s “파일명” 파일의 크기가 0이 아니면 참
-r “파일명” 읽기 권한이 있는 파일이면 참
-w “파일명” 쓰기 권한이 있는 파일이면 참
-x “파일명” 실행 권한이 있는 파일이면 참
-u “파일명” Set-UID 특수권한이 설정이 되어있을 경우 참
-z “변수명” 지정 한 변수가 없는 경우를 의미 ( ! )와 유사

 

비교 연산 설명
[ $a –eq $b ] a 변수와 b변수는 같다 ( Equal )
[ $a –ne $b ] a 변수와 b변수는 같지 않다 ( Negation )
[ $a –gt $b ] a 변수가 b변수보다 크다 ( Greater then )
[ $a –lt $b ] a 변수가 b변수보다 작다 ( Less then )
[ $a –ge $b ] a 변수가 b변수보다 크거나 같다 ( Greater Equal )
[ $a –le $b ] a 변수가 b변수보다 작다 ( Less Equal )
[ $string1 == $string2 ] String1이 String2와 같다
[ $string1 != $string2 ] String1이 String2와 다르다

 

논리 연산 설명
[ $A && $B ] A와 B가 모두 참이어야 참 ( AND )
[ $A || $B ] A와 B둘 중 하나만 참이어도 참 ( OR )

 

기타 제어문 설명
break 특정 실행 Loop에서 벗어나고자 할 때 사용
continue 특정 실행 Loop에서 조건식으로 이동하고자 할 때 사
exit 스크립트 종료시 사용
return 함수를 호출한 곳으로 되돌아 가고자 할 때 사용

 

 

 

if문
첫번째 예시

#cd /root/script
# vi ./if_test1.sh


# chmod +x ./if_test1.sh


# ./if_test1.sh 
Enter Is Command Path: /root/script/if
File Not Found 찾고자하는 파일의 경로와 파일명 입력


# ./if_test1.sh
Enter Is Command Path: /root/script/if_test1.sh
File location: /root/script/if_test1.sh


----------------------------------------------


if문
두번째 예시
# vi ./if_test2.sh


# chmod +x ./if_test2.sh
# ./if_test2.sh



----------------------------------------------
if문
세번째 예시
# vi ./if_test3.sh


# chmod +x ./if_test3.sh
# ./if_test3.sh


----------------------------------------------


if문
네번째 예시
# vi ./if_test4.sh


# chmod +x ./if_test4.sh
# ./if_test4.sh

 

 

 

# vi ./case_test1.sh




----------------------------------------------


case문
두번째 예시  파라미터 값 이용
# vi ./case_test2.sh


실행
파라미터 값 입력
# ./case_test2.sh 100 200


----------------------------------------------

case문
세번째 예시
# vi ./case_test3.sh


실행
# ./case_test3.sh car

 

 

 

select문
첫번째 예시
# vi ./select_test1.sh




실행 
# ./select_test1.sh 원하는 번호 입력. 종료는 ctrl+c
이제 디렉터리를 하나 만들고 다시 해보면 디렉터리라고 알려준다
# mkdir ./test

이제 해당 스크립트가 없는곳으로 경로를 이동해보자
# cd ~
그리고 실행
# /root/script/select_test1.sh
그리고 만들어준 디렉터리를 다시 실행해보면 디렉터리를 파일이라고 출력한다.

select문은 해당 스크립트가 없는 곳으로 이동해서 실행시키면 

파일과 디렉터리를 구분하지 못하는 한계가 있다.


----------------------------------------------

select문
두번째 예시  

보통 select문과 case문은 함께 쓰인다
# vi ./select_test2.sh



 

for문
첫번째 예시
# vi ./for_test1.sh



for문은 스크립트가 아닌 프롬프트 창에서도 가능하다.
# for cnt in {1..10..1}; do echo $cnt; done


----------------------------------------------

for문
두번째 예시
# vi ./for_test2.sh



----------------------------------------------

for문
세번째 예시
# vi ./for_test3.sh




----------------------------------------------

for문
네번째 예시
# vi ./for_test4.sh



----------------------------------------------

for문
다섯번째 예시
# vi ./for_test5.sh

 

 

 

while문
첫번째 예시
# vi ./while_test1.sh


----------------------------------------------

while문
두번째 예시
# vi ./while_test2.sh


----------------------------------------------

while문
세번째 예시 -- 가상머신에서 firefox 틀어놓고 진행
# vi ./while_test3.sh


# ./while_test3.sh
Input Apps Name: firefox



 


함수
첫번째 예시
# vi ./function_test1.sh

 


----------------------------------------------

함수
두번째 예시
# vi ./function_test2.sh


----------------------------------------

함수
세번째 예시
# vi ./function_test3.sh





eval 예시
# vi ./eval.sh



------------------------------------------------------------------------------------

set예시
같은연결 hann 로그인
$ vi ./set_test.sh

#!/bin/bash
echo "Before Error"
cd /root 일반사용자 계정으로 로그인 했지만 root로 이동하겠다는 에러가 발생하는 문구
echo "After Error"

실행시켜보면
허가거부 메세지가 나타나지만
그아래에 
echo "After Error"가 나타난다. 즉 에러가 발생해도 나머지것들을 정상적으로 실행하는 것을 알 수 있다.


#!/bin/bash
set -e echo "Before Error" set -e 를 추가
cd /root
echo "After Error"

다시 실행시켜보면
이번에는 허가거부가 나타나면서 다른 작업을 진행하지 않은 것을 알 수 있다.


-------------------------------------------------- 


unset 예시
# export My="Hello Word"
# echo $My
# unset My unset할때는 $빼고 입력
# echo $My

--------------------------------------------------

$ 예시 즉시실행.
# vi ./command.sh


# chmod +x ./command.sh

# ./command.sh
 작성해준 명령이 즉시 실행된다.

 

 

 

 

 

 

 

여기까지 ShellScript 에 대한 설명이 끝났다.

반응형