[이것이 리눅스다(CentOS 8)] 07장. 쉘 스크립트 프로그래밍

2023. 4. 2. 14:37·🐧 Linux/이것이 리눅스다(CentOS 8)

📝 CentOS의 bash 쉘

  • 기본 쉘은 bash(Bourne Again SHell)
  • bash 쉘의 특징
    • Alias 기능(명령어 단축 기능)
    • History 기능
    • 연산 기능
    • Job Control 기능
    • 자동 이름 완성 기능
    • 프로프트 제어 기능
    • 명령 편집 기능

📝 환경 변수

  • 아래와 같은 명령어로 확인 가능
# echo $[환경변수이름]
  • 아래의 명령어를 통해 환경 변수의 값을 변경
# export [환경변수]=[값]

주요 환경변수


📝 쉘 스크립트 프로그래밍

  • C언어와 유사하게 프로그래밍이 가능
  • 변수, 반복문, 제어문 등의 사용이 가능
  • 별도로 컴파일하지 않고 텍스트 파일 형태로 바로 실행
  • vi나 gedit으로 작성이 가능
  • 리눅스의 많은 부분이 쉘 스크립트로 작성되어 있음

 

📜 쉘 스크립트 작성과 실행

  • vi나 gedit으로 작성
  • 쉘 스크립트 파일의 확장명은 되도록 *.sh(shell)로 주는 것이 좋음
# vi sample.sh
  • 에디터로 들어와서 간단하게 아래와 같이 입력해주었음
#!/bin/sh
echo "사용자 이름: " $USER
echo "홈 디렉터리: " $HOME
exit 0
  • 위 스크립트의 맨 첫 줄은 반드시 들어가야 하는 문장으로, 스크립트를 실행할 쉘을 지정하는 선언문이다.
    • 스크립트 파일의 실행을 bash 쉘로 한다는 말을 뜻하며, 이를 미리 선언해줌으로써 bash 쉘 파일임을 미리 알려주는 것이 다른 쉘 간의 오류를 피하는 방법이다.
    • 이 라인을 기재하지 않아도 실행된다면, 리눅스 배포판은 기본적으로 bash 쉘로 설정되어 있어서 bash 쉘 상에서 무리없이 동작하는 경우이다.
  • 선언문 이후의 코드들은 각각 환경 변수를 이용하여 사용자 이름과 홈 디렉터리를 화면에 출력하는 간단한 코드이다.
  • 마지막 줄에 있는 코드는 사실 없어도 무관하나 사용하는 것을 권장하는 편이다.
  • 위 코드대로 저장하고 나와서 아래와 같은 명령어를 사용하면 실행 권한 없이도 쉘 스크립트 파일을 실행할 수 있다.
# sh sample.sh
  • 또는 실행 권한을 직접 부여한 뒤 실행할 수도 있다.
# chmod +x sample.sh
# ./sample.sh

 

📜 변수의 기본

  • 변수를 사용하기 전에 미리 선언하지 않으며, 변수에 처음 값이 할당되면서 자동으로 변수가 생성된다.
  • 모든 변수는 문자열(String)로 취급한다.
  • 변수 이름은 대소문자를 구분한다.
  • 변수를 대입할 때 '=' 좌우에는 공백이 없어야 한다.

 

📜 변수의 입력과 출력

  • '$' 문자가 포함된 글자를 출력하려면 작은 따옴표(')로 묶어주거나 앞에 백 슬래쉬('\')를 붙인다.
#!/bin/sh

myvar="Hi Woo"
echo $myvar
echo "$myvar"
echo '$myvar'
echo \$myvar
echo 값 입력:
read myvar
echo '$myvar' = $myvar

exit 0

 

📜 숫자 계산

  • 변수에 대입된 값은 모두 문자열로 취급한다.
  • 변수에 들어 있는 값을 숫자로 해서 사칙연산 등의 연산을 하려면 expr을 사용한다.
    • expr 문장은 `으로 묶는다
  • 수식에 괄호 또는 곱하기(*)는 그 앞에 꼭 역 슬래쉬('\')를 붙인다.
#!/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

 

📜 파라미터(Parameter) 변수

  • 파라미터 변수는 $0, $1, $2, ... 의 형태를 갖는다.
  • 전체 파라미터는 $*로 표현한다.

예시

#!/bin/sh

echo "실행파일 이름은 <$0>이다"
echo "첫 번째 파라미터는 <$1>이고, 두 번째 파라미터는 <$2>이다" 
echo "전체 파라미터는 <$*>이다"

exit 0

 

📜 기본 if 문

조건문에 들어가는 비교 연산자 1
조건문에 들어가는 비교 연산자 2
파일과 관련된 조건

  • if 문의 기본 형식은 아래와 같음
  • 조건 사이의 각 단어에는 모두 공백이 있어야 함
if [ 조건 ]
then
  참일 경우 실행
fi
  • 사용 예시
#!/bin/sh

if [ "woo" = "woo" ]
then
  echo "참입니다"
fi

exit 0

 

📜 if ~ else 문

  • if ~ else 문의 형식은 아래와 같음
  • 참고로, 중복 if문을 위해 else if가 합쳐진 elif 문도 사용할 수 있음
if [ 조건 ]
then
  참인 경우 실행
else
  거짓인 경우 실행
fi
  • 사용 예시
#!/bin/sh

if [ "woo" != "woo" ]
then 
  echo "참입니다"
else
  echo "거짓입니다"
fi

exit 0

 

📜 case ~ esac 문

  • if 문은 참과 거짓의 두 경우만 사용(2중 분기)
  • 여러 가지 경우의 수가 있다면 case 문을 사용할 수도 있음(다중 분기)
case 기준값 in
  조건값1)
    위 조건값과 동일할 시 실행될 구문
  조건값2)
    위 조건값과 동일할 시 실행될 구문
  조건값3)
    위 조건값과 동일할 시 실행될 구문
  *)
    위 조건값 중 아무 것도 해당되지 않을 경우 실행될 구문
esac

 

📜 AND, OR 관계 연산자

  • and는 '-a' 또는 '&&'를 사용
  • or는 '-o' 또는 '||'를 사용

 

📜 반복문 - for

  • for 반복문의 기본 형식 중 하나는 아래와 같음
for 변수 in 값1 값2 값3...
do
  반복할 문장
done

 

📜 반복문 - while

  • while 반복문의 기본 형식은 아래와 같음
while [ 조건 ]
do
  반복할 코드
done

 

📜 반복문 - until

  • while 문과 용도가 거의 같지만, until 문은 조건식이 참일 때까지(= 거짓인 동안) 계속 반복함
until [ 조건 ]
do
  반복할 코드
done

 

📜 그 외

  • eval: 문자열을 명령문으로 인식하고 실행
  • export: 외부 변수로 선언해줌. 즉, 선언한 변수를 다른 프로그램에서도 사용할 수 있도록 해줌
  • printf: C언어의 printf() 함수와 비슷하게 형식을 지정해서 출력
  • shift: 파라미터 변수를 왼쪽으로 한 단계씩 아래로 쉬프트 시킴
저작자표시 (새창열림)

'🐧 Linux > 이것이 리눅스다(CentOS 8)' 카테고리의 다른 글

[이것이 리눅스다(CentOS 8)] 09장. 네임 서버 설치와 운영  (0) 2023.04.03
[이것이 리눅스다(CentOS 8)] 08장. 원격지 시스템 관리하기  (0) 2023.04.02
[이것이 리눅스다(CentOS 8)] 06장. 하드디스크 관리와 사용자별 공간 할당(3)  (0) 2023.04.01
[이것이 리눅스다(CentOS 8)] 06장. 하드디스크 관리와 사용자별 공간 할당(2)  (0) 2023.03.31
[이것이 리눅스다(CentOS 8)] 06장. 하드디스크 관리와 사용자별 공간 할당(1)  (0) 2023.03.31
'🐧 Linux/이것이 리눅스다(CentOS 8)' 카테고리의 다른 글
  • [이것이 리눅스다(CentOS 8)] 09장. 네임 서버 설치와 운영
  • [이것이 리눅스다(CentOS 8)] 08장. 원격지 시스템 관리하기
  • [이것이 리눅스다(CentOS 8)] 06장. 하드디스크 관리와 사용자별 공간 할당(3)
  • [이것이 리눅스다(CentOS 8)] 06장. 하드디스크 관리와 사용자별 공간 할당(2)
Baeg-won
Baeg-won
  • Baeg-won
    좋았다면 추억이고 나빴다면 경험이다.
    Baeg-won
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 🍃 Spring, Spring Boot
        • 스프링 프레임워크 기초
        • 스프링 핵심 원리 - 기본편
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편
        • 스프링 MVC
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리..
      • 🥑 Web Technoloy
      • 🚗 Backend Toy Project
        • 스프링 부트 게시판
        • Photogram
        • Baeg-won Clothing Gallery
      • 🥇 Problem Solving
        • Breadth-First Search
        • Depth-First Search
        • Backtracking
        • Simulation
        • Two-pointer
        • Binary Search
        • Greedy
        • Dynamic Programming
        • Minimum Spanning Tree
        • Dijkstra
        • Floyd warshall
      • ☕ Java
        • 명품 자바 에센셜
        • Applications
      • 🍦 JavaScript
        • JavaScript 기초
      • 🐧 Linux
        • 이것이 리눅스다(CentOS 8)
      • 📟 Database
        • 혼자 공부하는 SQL
      • 🧬 Data Structure
      • 🎬 HTML
      • 🎤 Tech Interview
      • 📌 etc
        • Unity 2D Raising Jelly Game
        • C++
        • 영어 쉐도잉
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Baeg-won
[이것이 리눅스다(CentOS 8)] 07장. 쉘 스크립트 프로그래밍
상단으로

티스토리툴바