sh : 초기의 유닉스 쉘
ksh : sh 확장
csh : C언어 기반
bash : sh와 호환
지역변수(local), 전역변수(global), 환경변수, 예약변수, 매개변수 등
대소문자 구분있고, 숫자로 시작할수없다. 모든 값을 문자열로 저장
변수명 앞에 $, test='1234'
예약변수 종류 : HOME, PATH, LANG, UID, USER, FUNCTION, TERN 등
산술 연산
# 현재 사용 중인 셸(shell)의 경로 확인
[root@localhost ~]# echo $SHELL
/bin/bash
# 스크립트 작성
[root@localhost ~]# vi test.sh
#i/bin/bash
echo "Hello World"
//스크립트의 제일 윗줄은 쉘 선언문 (Shebang)
# 권한 부여
[root@localhost ~]# chmod 755 test.sh
# 퍼미션 확인
[root@localhost ~]# ls -l
total 8 -rw-------. 1 root root 813 Aug 19 14:29 anaconda-ks.cfg
-rw-r--r-- 1 root root 33 Aug 21 09:16 test.sh
# 스크립트 실행 방법
[root@localhost ~]# ./test.sh
Hello World
[root@localhost ~]# sh test.sh
Hello World
[root@localhost ~]# bash test.sh
Hello World

#test.sh 를 통해 script 학습하기
local 키워드를 앞에 붙이면 그 함수의 지역변수로 동작


declare 키워드는 변수를 지정하고 속성을 지정

# 환경변수 export 예제
[root@localhost ~]# vi export.sh
#i/bin/bash echo
${hello_world}
[root@localhost ~]# chmod 755 export.sh
[root@localhost ~]# export hello_world="Test Test"
[root@localhost ~]# bash export.sh
// export를 사용하여 변수를 환경 변수로 만들고, 부모-자식 프로세스 간에 변수 값을 공유
// 현재 셸뿐만 아니라 이 셸에서 실행되는 모든 자식 프로세스에서도 이 변수에 접근가능
# 매개변수
[root@localhost ~]# vi export.sh
echo "script name : ${0}"
echo "total arg : ${#}"
echo "second arg : ${2}"
echo "total arg value : ${@}"
# 예제 스크립트 실행
[root@localhost ~]# bash export.sh
script name : export.sh
total arg : 0
second arg :
total arg value :
[root@localhost ~]# bash export.sh a b c d e
script name : export.sh
total arg : 5 second
arg : b total
arg value : a b c d e

declare 를 사용하지않고 산술 연산 변수로 연산 가능
곱셈은 역슬래쉬와 함께
[root@localhost ~]# vi export.sh
number1=10
number2=20
plus='expr $number1 + $number2'
mul='expr $number1 \* $number2'
echo "${plus}"
echo "${mul}"
echo "add:$((number1+number2))"
# echo "Hello"
: << "END"
echo "test"
echo "test2" END
// 줄 가장 앞에 '#'을 넣으면 그 라인은 주석처리
[root@localhost ~]# bash export.sh
script name : export.sh
total arg : 0
30
200
add:30

조건문 if문의 기본구조
if [ 조건1 ]
then
# 조건1이 참일 때 실행되는 코드
elif [ 조건2 ]
then # 조건1이 거짓이고 조건2가 참일 때 실행되는 코드
else
# 모든 조건이 거짓일 때 실행되는 코드
fi
[root@localhost ~]# vi export.sh
#i/bin/bash
a=10
b=20
if [ ${a} -eq ${b} ]; then
echo "a = b"
else
echo " a != b "
fi
if (( ${a} < ${b} )); then
echo "yes"
[root@localhost ~]# bash export.sh
a != b
yes
if [ ${a} -lt ${b} ]; then
echo "yes"
elif [ ${a} -eq ${b} ]; then
echo "equal"
else
echo "no" fi
// 한줄띄기를 하지않고 한줄에 여러문장을 쓰고싶다면 문장끝에 ';'로 끝맺음
조건문 case문의 기본 구조
case 변수 in
패턴1)
# 패턴1에 일치할 때 실행될 코드 ;; 패턴2 | 패턴3)
# 패턴2 또는 패턴3에 일치할 때 실행될 코드 ;; *) # 위 패턴 중 어느 것에도 일치하지 않을 때 실행될 코드 ;; esac
# case 예제 작성
[root@localhost ~]# sh fi.sh
os=linux
case ${os} in
"linux") echo "Rocky";;
"windows") echo "Windows 11;;
"mac") echo "MacOS;;
esac
# 스크립트 실행
[root@localhost ~]# sh fi.sh
Rocky
# for문 예제 작성
[root@localhost ~]# vi repeat.sh
#!/bin/bash
for ((i=1; i<=4; i++)); do
echo $i
done
data="1 2 3 4 5"
for x in $data
do
echo "${x}"
done
# 스크립트 실행
[root@localhost ~]# bash repeat.sh
1 2 3 4 1 2 3 4 5
# seq / .. 예제 작성
[root@localhost ~]# vi repeat.sh
for num in `seq 1 5`
do
echo $num
done
for num in {1..5}
do
echo $num
done
#스크립트 실행
[root@localhost ~]# bash repeat.sh
seq 1 5 1 2 3 4 5
역따옴표(``)와 작은따옴표(')는 셸 스크립트에서 완전히 다른 역할
역따옴표 (``) 또는 $() 로 사용
역따옴표는 명령어 치환(command substitution) 기능
명령어 실행 후 그 결과값을 반환 (예시: var=$(ls))
작은따옴표는 문자열을 보호하는 역할로 그 자체의 문자로 인식
조건문 while문의 기본 구조
while [ 조건식 ]
do # 조건식이 참일 때 반복해서 실행할 코드
done
# while문 예제 작성
[root@localhost ~]# vi repeat.sh
count=0
while [ ${count} -le 5 ];
do
echo ${count}
count=$(( ${count}+1 ))
done
# 스크립트 실행
[root@localhost ~]# bash repeat.sh
0 1 2 3 4 5
# while문 예제2 작성
[root@localhost ~]# vi repeat.sh
count2=10
until [ ${count2} -le 5 ]
do
echo ${count2}
count2=$(( $count2 - 1 ))
done
# 스크립트 실행
[root@localhost ~]# sh repeat.sh
10 9 8 7 6