시그마 삽질==six 시그마

Linux 쉘 스크립트 본문

프로그래밍/Linux

Linux 쉘 스크립트

Ethan Matthew Hunt 2020. 3. 17. 22:41
A shell script is a computer program designed to be run by the Unix shell, a command-line interpreter.[1] The various dialects of shell scripts are considered to be scripting languages. Typical operations performed by shell scripts include file manipulation, program execution, and printing text. 

 

 

디티솔루션의 우재남 연구소장님의  '이것이 리눅스다'  책을 구입하시길 추천드립니다.

책 구입을 원하시는분은 요기를 클릭하시면 됩니다.

※  우재남 연구소장님의 무료 동영상 강의
https://www.youtube.com/playlist?list=PLVsNizTWUw7EoFNBhIdVFp9eT6P22hU1o

※ 우재남 연구소장님의 Q/A를 위한 네이버 카페
http://cafe.naver.com/thisislinux


하단의 내용은 예전에 읽었던 내용을 정리한 것입니다.

 

1. 쉘의 기본

 

쉘은 사용자가 입력한 명령을 해석해 커널에게 전달하거나 커널의 처리 결과를 사용자에게 전달하는 역할을 함.

Linux에서 기본적으로 사용하는 셸은 bash 셀임. 

 

특징
-알리아스기능
-히스토리기능
-연산기능
-job Control 기능
-자동 이름 완성 기능
-프롬프트 제어기능
-명령 편집기능

알리아스 명령어는 긴명령어를 줄일때 편하다 예를들어 ls -al을 ls2라는 명령어로 사용하고 싶으면
alias ls2="ls -al" 로 정의한다

 


2. 쉘의 환경변수


쉘은 여러가지 환경 변수값을 갖는데 설정된 환경변수는 echo $환경 변수이름 형식으로 실행하며 확인할 수 있다.

 


3. 쉘 스크립트 작성과 실행

 


#!/bin/sh  <-특별한 형태의 주석으로 bash를 사용하겠다는 의미이다. 첫행에 꼭 써야함.
echo "사용자 이름 :" $USERNAME

echo "호스트 이름: " $HOSTNAME 

exit0  <-마지막행에 성공인지 실패인지 반환한는것이 좋음 exit0은 성공임



1) sh 파일명으로 실행  sh name.sh
2.) sh파일에 실행권한을 준후(chmod +x 파일명)  ./파일명 하면됨.   ./파일명에서 ./는 현재디렉토리를 말함
일반적으로 명령어나 스크립트 이름만 입력하고 엔터치면  환경변수에 있는 path를 찾아봄. 

 

4. 변수

 

-변수의 기본
쉘스크립트에서는 변수를 사용하기전에 미리 선언하지 않으며 처음 변수에 값이 할당되면 자동으로 변수가 생성된다
변수에 넣는 모든 값은 문자열로 취급한다. 즉 숫자를 넣어도 문자로 취급한다
변수 이름은 대소문자를 구분한다. 
변수를 대입할때 =좌우에 공백이 없어야 한다
값의 공백은 " " 로 묶어야 한다.

-변수의 입력과 출력 
$라는 문자가 들어간 글자를 추력하려면 ' ' 로 묶어주던가 앞에 \를 붙여야 한다. 
또한 ""로 변수를 묶어도 되고 묶지 않아도 된다.


-숫자 계산
+ = * / 의 연산을 하려면 expr 키워드를 사용한다.
숫자는 각 단어마다 띄어쓰기를 해야함.
단 수식과 함께 꼭 키보드 숫자1 왼쪽에 있는 역따옴표로`로 묶어야 한다. 수식에 괄호를 사용하려면 그앞에 꼭 역슬래시 \를 붙여야한다
또 *기호도 예외적으로 앞에 역슬래시\를 붙여줘야한다

#!/bin/sh
num1=100
num2=$num1+200
echo $num2
num3=`expr $num1 + 200`
echo $num3
num4=`expr \( $num1 + 200 \) / 10 \* 2`
echo $num4
exit 0

100+200
300
60


-파라미터 변수

파라미터 변수는 $0 $1 $2 형태를 갖음. 이는 실행하는 명령의 부분 하나하를 변수로 지정한다는 의미임.
yum -y install gftp라하면
$0  $1   $2    $3 


sh paravar.sh  값1 값 2 값3
$0 이 값1 
$1 이 값2
$2 이 값3

 

 

5. If 문과 case 문


기본 if문
if [조건 ]
 then 
 참일 경우 실행
fi

[조건] 사이의 각단어는 모두 공백이 있어야함
 조건속  = ,!=

 

#!/bin/sh
if [  "woo"  =  "woo"  ]
then
  echo "참입니다"
fi
exit 0

 

 

 


if else문

 

if [ 조건]
 then 
 참일경우 실행
else 
 거짓인 경우 실행
fi

 

 

#!/bin/sh
if  [  "woo"  !=  "woo"  ]
then
  echo "참입니다"
else
  echo "거짓입니다"
fi
exit 0

 

결과: 거짓입니다.

 

 

-산술비교 연산자

수식1 -eq 수식2: 같으면 참

,수식1 -ne 수식2: 다르면 참

,수식1 -gt 수식2: 수식1크면 참

,수식1 -ge 수식2: 수식1이 크커가 같으면 참

,수식1 -lt 수식2:수식1이 작으면 참

,수식1 -le 수식2:수식 1이 작거나 같으면 참

, !수식: 수식이 거짓이라면 참

 

#!/bin/sh
if [ 100 -eq 200 ]
then
  echo "100과 200은 같다."
else
  echo "100과 200은 다르다."
fi
exit 0

 

6. case ~esac문

#!/bin/sh

case "$1" in
 start)
 echo "시작~";;
 stop)
 echo "중지~";;
 restart)
 echo "재시작~";;
  *)
 echo "몬지모름~";;

esac
exit 0

입력 :sh case1.sh stop

결과: 중지~

주의할점은 세미콜론 2개 부여야함. 

 


#!/bin/sh
echo "리눅스가 재미있나요? (yes, no)"
read answer
case $answer in

yes | y | Y | yes | YES)

 echo "다행입니다" 
 echo "더열심히 하세요";;

[nN]*)

 echo "안타깝네요";;

*)

 echo "yes 아니면 no만 입력했어야죠"
 exit 1 ;;
esac
exit 0

[root@ip-172-31-87-191 ~]# sh case2.sh
리눅스가 재미있나요? (yes, no)
y
다행입니다
더열심히 하세요
[root@ip-172-31-87-191 ~]# sh case2.sh
리눅스가 재미있나요? (yes, no)
n
안타깝네요
[root@ip-172-31-87-191 ~]# sh case2.sh
리눅스가 재미있나요? (yes, no)
dd
yest 아니면 no만 입력했어야죠

 

 


7. for문


for 변수 in 값1 값2 값3...
do  
 반복할 문장
done

 

 

-for1.sh

 

#!/bin/sh
hap=0
for i in 1 2 3 4 5 6 7 8 9 10
do
  hap=`expr  $hap  +  $i`
done
echo "1부터 10까지의 합: "$hap
exit 0

 

결과:55

 

 

 

-test.sh

 

#!/bin/sh

echo "hello"

echo "world"

 

test.sh, for1.sh를 for2.sh와 같은 폴더에 위치시킨다.

 

 

 

-for2.sh

for2.sh는 현재 디렉토리에 있는 셀스크립트 파일의 파일이름과 앞3줄을 출력하는 프로그램임

 

#!/bin/sh
for fname in $(ls *.sh)
do
  echo "--------$fname-------"
  head -3 $fname
done
exit 0

 

결과:

--------test.sh-------

#!/bin/sh

echo "hello"

echo "world"

--------for1.sh-------

#!/bin/sh
hap=0
for i in 1 2 3 4 5 6 7 8 9 10


8.사용자 정의 함수

 

 


함수이름(){   ->함수정의
 내용들...
}
함수이름  ->함수호출


함수의 파라미터 사용
함수이름(){   ->함수정의
 $1  ,$2 ....등을 사용
}
함수이름  파라미터1 파라미터2 ->함수호출


#!/bin/sh

hap(){
echo `expr $1 + $2 `
}

echo "10더하기 20을 실행합니다"
hap 10 20
exit 0

[root@ip-172-31-87-191 ~]# sh func2.sh
10더하기 20을 실행합니다
30

 

 

9. eval

 

문자열을 명령문으로 인식하고 실행한다

 

eval.sh

 

#!/bin/sh
str="ls -l eval.sh"
echo $str
eval $str
exit 0

 

 


10. export

 


export 외부 변수로 선언한다. 즉 ,선언한 변수를 다른 프로그램에서도 사용할 수 있게 한다

 

exp1.sh

 

#!/bin/sh
echo $var1
echo $var2
exit 0

 

exp2.sh

 

#!/bin/sh
var1="지역 변수"
export var2="외부 변수"
sh exp1.sh
exit 0

 

 

11. set $(명령어)


리눅스 명령어를 결과로 사용하려면 $(명령어)형식을 사용해야한다. 또 결과를 파라미터로 사용하고자 할때는 set 명령어와 함꼐 사용한다

 

set.sh

 

#!/bin/sh
echo "오늘 날짜는 $(date) 입니다"
set $(date)
echo "오늘은 $0 요일 입니다."
exit 0

[root@ip-172-31-87-191 ~]# sh set.sh
오늘 날짜는 Sat Oct 27 16:26:10 UTC 2018 입니다
오늘은 Sat  요일 입니다.

'프로그래밍 > Linux' 카테고리의 다른 글

mac 포트 죽이기 (tomcat..)  (0) 2020.08.26
mac 터미널 명령어  (0) 2020.08.06
Linux crontab  (0) 2020.03.17
RPM & YUM  (0) 2020.03.16
리눅스 디스크 용량 확인(df/ du)  (0) 2020.03.15
Comments