[리눅스] - shell 프로그래밍
2024. 9. 5. 17:50ㆍ현대 오토에버 SW 스쿨 - 클라우드/리눅스
SMALL
>> 리눅스의 쉘 스크립트는 C 언어와 유사한 방법으로 프로그래밍 할 수 있습니다.
>> 쉘 스크립트 파일의 확장자는 sh 로 합니다.
>> 최상단에는 #!/bin/sh 를 추가합니다.
>> 셔뱅이라고는 bash 쉘을 사용하겠는 의미이며 #으로 시작하면 주석이지만 #!는 주석이 아닙니다.
파일 실행 방법
- sh 스크립트 파일 경로 :: 읽기 권한만 있다면 수행됩니다.
- 스크립트 파일의 경로 - 현재 디렉터리에 있는 경우 ./를 추가해서 경로를 작성합니다. 실행권한이 있어야 실행가능합니다.
- 경로 입력시 실행 x 1. ./를 추가하지 않은 경우 2. 실행 권한이 없는 경우
- cron 생성 시 스크립트로 생성 후 실행시키는 것이 좋습니다. 파일을 저장하고 실행하는 것이 안전합니다.
변수
- 이름에 값을 보관하기 위한 것으로 shell programming 에서는 변수에 넣는 값은 모두 문자열로 취급
- 변수 이름은 대소문자를 구분하며 데이터를 대입할 때 = 를 이용하는데 좌우에 공백이 없어야 합니다.
- 값에 공백이 있는 경우 ""(큰따옴표)로 묶어 주어야합니다.
- $(달러) 가 들어간 내용을 출력할 때는 "'(큰따옴표)로 묶어주거나 ₩(원)를 붙여서 출력을 해야합니다.
- echo $변수이름 : 출력

계산식 사용
- 계산식을 사용하고자 하는 경우 ₩(백틱) 안에 expr 로 시작해서 작성하면 됩니다.
- 수식에 ()(괄호)를 사용하는 경우 / *(곱하기) 를 사용할 때에는 ₩ 를 붙여야 합니다.
파라미터 설정
- 실행을 할 때 명령과 같이 넘겨주는 데이터로 데이터가 없으면 명령이나 프로그램은 고정적인 일만 가능합니다.
- 파라미터를 사용할 때는 $파라미터위치 형태로 작성하면 되고 위치는 0 부터 시작합니다.
- sh 스크립트 파일 이름이 a b c d 인 경우 -> echo "$0" -> a; echo "$2" -> c
- 명령어 :: shell 내장 명령 (shell 에 따라 다를 수 있음)+ 실행파일 경로
- -옵션도 파라미터 // shell 프로그래밍 :: 명령어부터 파라미터로 인식 // $0 = 자신의 파일명?
- 외부 -> 함수 :: 파라미터 // 함수 내에서 실행 :: argument
- 기본적으로 파일은 실행 권한이 없이 생성됩니다. -> 일반적으로 바이너리 파일은 모두가 사용할 수 있게 설정 ls
- chmod 로 실행 권한 부여 -> ./파일이름 으로 실행 가능 // PATH 에 추가하는 방법도 있음 (export PATH=$PATH:디렉터리 이름)
- 실행 프로그램은 명령이 들어오면 PATH 에 가서 찾음
vi param.sh -- vi 편집기
-- vi 편집기 내부에 프로그램 작성
#! /bin/sh
echo "first-parameter <$0>"
echo `expr $1 + $2`
:wq
sh param.sh 1 2 -- 저장 후 나와서 확인 1,2 파라미터 부여
> first-parameter <param.sh> -- 결과
> 3
제어문
if
- 형식 : if [표현식] then 참일 때 수행할 내용 else 거짓일 때 수행할 내용 fi
파일 관련 조건
-d 파일 경로 : 디렉터리면 참
-e 파일 경로 : 존재하면 참
-f 파일 경로 : 일반 파일이면 참
-g 파일 경로 : setGID 가 설정되면 참
-r 파일 경로 : 읽기 가능이면 참
-s 파일 경로 : 크기가 0이 아니면 참
-u 파일 경로 : setUID 가 설정되면 참
-w 파일 경로 : 쓰기 가능이면 참
-x 파일 경로 : 실행 가능이면 참
-- testFile.sh 파일 생성 후 작성
vi testFile.sh
#! /bin/bash
if [ -f /lib/systemd/system/cron.service ]
then
echo "file is exist"
else
echo "file not found"
fi
-- 저장 후 실행
sh testFile.sh
> file is exist
case ~esac
- 참/거짓이 아닌 값으로 분기합니다.
- 형식 : case 데이터 in 값) 값일 때 수행할 내용;; 값) 값일 때 수행할 내용;; *) 나머지 경우에 수행할 내용;; esac
- 수행할 내용이 여러개가 가능하므로 하나의 수행값 다음으로 ;; 를 추가해줘야 합니다.
- 여러개의 값에 동일한 내용을 수행하고 하는 경우 값에 | (하이픈) 을 사용하여 작성할 수 있습니다.
-- case.sh 에 생성
#! /bin/sh
case "$1" in
s)
echo "start";;
e)
echo "and";;
*)
echo "end";;
esac
and & or
- and - &&, -a 로 대체 가능
- or - || , -o 로 대체 가능
- 형식 : if [조건] && [조건] 의 형태로 입력
-- cron.service 파일과 홈 디렉터리에 if.sh 파일이 있다면 성공 아니면 실패라고 출력
#! /bin/sh
if [ -f /lib/systemd/system/cron.service ] && [ -f ~/if.sh ]
then
echo "success"
else
echo "fail"
fi
for ~in
- 형식 : for 임시변수 in 데이터 나열 do 데이터를 임시변수에 하나씩 대입하고 수행할 문장 done
- in 뒤의 데이터 개수만큼 반복
for i in 1 2 3 4 5
do
hap=`expr $hap + $i`;
done
echo $hap
- 현재 디렉터리의 모든 txt 파일을 읽어서 내용을 출력
while
- 표현식이 거짓이 될 때까지 반복
- 형식 : while [표현식] do 표현식이 거짓이 아니면 수행할 내용 done
기타
break :: for 나 while 을 강제로 중단하고자 할 때 사용, case 구문에서 수행할 내용이 없을 때 사용하기도 합니다.
until :: 반복문
continue :: for 나 while 의 시작 부분으로 이동
exit :: 프로그램을 완전히 종료하는 제어문으로 상위 프로세스에게 넘겨줄 정수를 가팅 사용합니다.
return :: 함수를 호출한 고승로 돌아가는 제어 명령어
Function
- 자주 사용하는 구문을 묶어서 하나의 이름으로 사용합니다.
- 메모리를 별도로 할당 받아서 사용하여 함수부터는 모듈 프로그램으로 인식합니다.
- 함수가 별도의 객체가 되는 경우 함수형 프로그래밍, 함수가 종속되는 경우 객체지향 프로그래밍이라고 합니다.
- 모듈 :: 나누어져서 할 수 있는 것을 말함. Function, Instance, File
- 형식 :: 이름 (매개변수 나열) { 함수 내용 (줄바꿈) return}
- 호출 :: 함수이름(매개변수)
#! /bin/sh
myfunc() {
echo "My Function"
return
}
myfunc
sh func.sh
>> My Function
eval
- 문자열을 명령으로 수행
- 파이썬이나 자바스크립트에서 이함수가 문자열을 데이터로 치환합니다.
- 형식 : eval "문자열"

반응형
LIST
'현대 오토에버 SW 스쿨 - 클라우드 > 리눅스' 카테고리의 다른 글
[리눅스 관리] - 리눅스 우분투 사용자 계정 관리 명령어 사용법 (1) | 2024.09.09 |
---|---|
[리눅스] - 소프트웨어 관리자 (1) | 2024.09.05 |
[리눅스] - 리눅스의 프로세스 관리 (3) | 2024.09.05 |
[리눅스] - 파일 시스템 (1) | 2024.09.03 |
[리눅스] - shell (0) | 2024.09.03 |