[Linux] 리눅스 쉘 스크립트 1

BBeumSeok·2024년 8월 20일
0

Linux

목록 보기
7/8
post-thumbnail

리눅스의 쉘 스크립트

  • bash, tsch, zsh, ... 등의 쉘을 이용한 프로그래밍을 의미한다.

쉘 프로그래밍을 위한 변수와 특수 변수

  1. 일반 변수
  • 변수의 선언 및 초기화
변수명 = 값
ex) # hello = 안녕하세요

  • 변수값 참조(변수 불러오기)
$변수명, $(변수명)

  • expr
    문자형 변수를 정수처럼 형변환하여 계산이 가능하게 만들어준다.
    이 명령어를 사용하지 않으면 문자로 처리한다.

  1. 특수 변수
  • 일반적인 변수와 다르게 이미 정해진 의미를 가지고 이용되는 변수들이 있다.
#!/bin/bash
=> 실행하려는 스크립트를 지정하고 동작하게 해준다.

- 특수 변수 종류

  1. $#
    명령 입력 라인에서 입력된 인자의 갯수를 저장

  2. $*
    명령 입력 라인에서 입력된 인자 전체가 저장

  3. $@
    명령 입력 라인에서 입력된 인자 전체 저장

  4. 쉘프로그램이실행되면사용된프로세스ID값을저장하는변수<br>쉘 프로그램이 실행되면 사용된 프로세스 ID값을 저장하는 변수 <br>
  5. $!
    쉘 프로그램이 실행되면서 실행시킨 백그라운드 프로세스 ID 값을 저장하는 변수

  6. $?
    최근 실행된 명령어의 리턴값을 저장하고 있다.

- 특수 변수의 사용 예시

  • 출력 결과

  1. 환경 변수
  • 시스템 구동 시 사용하는 운영을 위한 변수
    (bash의 주요 환경 변수)

- 환경 변수의 종류

HOME   : 현재 사용자의 홈디렉터리

PATH   : 실행파일을 찾는 디렉터리 경로

LANG   : 기본 지원되는 언어

PWD   : 사용자의 현재 작업 디렉터리

TERM   : 로그인 터미널 타입

SHELL   : 로그인해서 사용하는 쉘

USER   : 현재 사용자의 이름

DISPLAY   : X디스플레이 이름

COLUMNS : 현재 터미널의 컬럼 수 

LINES   : 현재 터미널의 라인 수 

PS1   : 1차 명령 프롬프트 변수

PS2   : 2차 명령 프롬프트(대개는 ">")

BASH   : bash쉘의 경로

BASH_VERSION : bash버전

HISTFILE   : 히스토리 파일의 경로

HISTSIZE   : 히스토리 파일에 저장되는 개수

HOSTNAME : 호스트의 이름

USERNAME : 현재 사용자의 이름

LOGNAME : 로그인 이름

LS_COLORS : ls 명령어의 확장 색상 옵션

MAIL   : 메일을 보관하는 경로

OSTYPE   : 운영체제 타입

  • 사용 예시


조건문 (if문과 case문)

  • 기본 if문
    조건식의 참과 거짓을 판별
    조건이 참이면 실행

[형식]
  if [ 조건 ]
  then
     참일 경우 실행 내용
  fi
**주의] 조건 부분인 "[ 조건 ]" 각 내용 사이에는 공백 이 존재함. 

if문 스크립트 작성


if문 출력 결과

  • if ~ else문
[형식]
  if [ 조건 ] 
  then
    참일 경우 실행 내용
  else
    거짓인 경우 실행 내용
  fi

if ~ else문 스크립트 작성


if ~ else문 출력 결과


  • 조건문에 들어가는 비교 연산자
[문자열 비교]
    "A"   ==   "B"   : 두문자열이 같으면 참 
    "A"   !=    "B"   : 두문자열이 다르면 참
    -n "A"   : 문자열이 NULL이 아니면 참
    -z "A"   :  문자열이 NULL이면 참
  
           *NULL : 빈문자
           
           
[산술 비교]
   수식1 -eq 수식2   : 두 수식이 같으면 참
   수식1 -ne 수식2   : 두 수식이 다르면 참
   수식1 -gt 수식2   : 수식1이 크다면 참
   수식1 -ge 수식2   : 수식1이 크거나 같으면 참
   수식1 -lt 수식2   : 수식1이 작다면 참
   수식1 -le 수식2   : 수식1이 작거나 같다면 참
        !수식   : 수식이 거짓이면 참           

비교연산자 사용 예시


출력 결과


  • 파일과 관련된 조건
  -d 파일이름   : 파일이 디렉터리면 참
  -e 파일이름   : 파일이 존재하면 참
  -f 파일이름   : 파일이 일반 파일이면 참
  -g 파일이름   : 파일에 set-group-id가 설정되면 참
  -r 파일이름   : 파일이 읽기 가능하면 참
  -s 파일이름   : 파일 크기가 0이 아니면 참
  -u 파일이름   : 파일에 set-user-id가 설정되면 참
  -w 파일이름   : 파일이 쓰기 가능한 상태면 참
  -x 파일이름   : 파일이 실행 가능 상태면 참

파일 조건 테스트


출력 결과


case ~ esac문

  • if문은 참과 거짓이라는 두 가지 경우에만 사용한다.
    여러가지 경우의 수를 가지고 작업할 경우에 if를 중복해서 사용해야 하는데, 이때 if 대신
    사용하는 것이 case문이고 다중 분기라고도 한다.

1-1. case문 사용 예시


1-2. case문 출력 결과


2-1. case문 사용 예시 2


2-2. case문 2 출력 결과


반복문

  1. for ~ in문
  • for ~ in 구문은 각 변수의 값을 집어 넣은 후에 do에 있는 내용을 실행
    이때 do는 반복 시 실행할 내용
[형식]
     for 변수 in 값1 값2 값3 값4 .... 
     do 
        반복할 문장....
     done

1-1. for ~ in문 테스트



1-2. 출력 결과


2-1. for ~ in문 2


2-2. 출력 결과


AWS CLI 설치하기(Home Directory)

  1. python 설치(예제의 경우 python3)

  2. curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

  3. unzip awscliv2.zip
    => 이때 unzip이 not found이면 설치 - sudo apt install unzip

  4. ls -ld aws*

  • awscliv2가 압축 해제된 것을 확인한다.

  1. sudo ./aws/install

  2. aws --version 명령어 입력

  • 버전과 함께 Python 정보가 출력되면 정상적으로 설치된 것이다.

AWS CLI를 사용하기 위한 설정

  1. AWS 홈페이지에서 IAM을 검색

  2. 좌측 액세스 관리 탭에서 사용자 클릭

  3. 사용자 생성 버튼 클릭

4-1. 사용자 이름 설정

4-2. 권한 설정(필요한만큼)

  • 예제의 경우 AdministratorAccess 정책만 추가

4-3. 검토 및 생성

  1. 생성한 사용자를 클릭

6-1. 액세스 키 생성

6-2. 액세스 키의 경우 Access Key/Secret Access Key 둘 다 생성된다.

  • Secret Access Key의 경우 cvg 파일을 다운받던지 사용자가 알아서 관리해야 함

  1. CLI 명령창에 aws configure 입력

  2. AWS CLI 설정

  • AWS Access Key ID(액세스 키)

  • AWS Secret Access Key(비밀 액세스 키)

  • Default region name(서울의 경우 ap-northeast-2)

  • Default output format : json

AWS CLI를 이용한 EC2 생성

  1. key-pair 생성(ec2-create-keypair)
[리눅스]
>aws ec2 create-key-pair --key-name test_cli_key --query "KeyMaterail" 
--output text > test_cli_key.pem (test_cli_key.pem 생성확인)

  1. security-group 생성(ec2 -> create-security-group)

2-1. 그룹 생성

> aws ec2 create-security-group --group-name cli_aws_securitygrp 
--description cli_aws_security_group

{
    "GroupId": "sg-04129ec44e372a040"
}

2-2. 규칙 생성

> aws ec2 authorize-security-group-ingress --group-id sg-0cdd74c92a19e3ad2 --protocol tcp --port 22 --cidr 0.0.0.0/0
> aws ec2 authorize-security-group-ingress --group-id sg-0cdd74c92a19e3ad2 --protocol tcp --port 80 --cidr 0.0.0.0/0
> aws ec2 authorize-security-group-ingress --group-id sg-0cdd74c92a19e3ad2 --protocol tcp --port 3000 --cidr 0.0.0.0/0

  1. EC2 기동(aws ec2 run-instances)
(기본 필요 옵션)
  --image-id : AMI ID -> ami-04ea5b2d3c8ceccf8
  --instance-type : 인스턴스 타입  -> t2.micro
  --security-group-ids : 보안 그룹 ID  -> sg-04129ec44e372a040
  --key-name : 키 이름(key-pair)  -> test_cli_key(.pem 생략 가능)
  --subnet-id : 서브넷 ID(VPC내에 있는 subnet을 구분하는 값)
    -> subnet-07fef6c1eff10a532

>aws ec2 run-instances --image-id ami-04ea5b2d3c8ceccf8 --instance-type t2.micro 
	--security-group-ids sg-0cdd74c92a19e3ad2 --key-name test_cli_key2(.pem) 
	--subnet-id subnet-2577e34e

  1. EC2 인스턴스 기동을 위한 태그 설정(aws ec2 create-tag)
> aws ec2 create-tags --resources i-0fc7378442e12938a(인스턴스아이디) 
	--tags Key=Name,Value=First-ec2-CLI

  1. EIP(Elastic IP) 할당 및 연결
  • 할당 : aws ec2 allocate-address
aws ec2 allocate-address

(결과)
{
    "PublicIp": "3.37.34.211",
    "AllocationId": "eipalloc-0313ee548d683413a",
    "PublicIpv4Pool": "amazon",
    "NetworkBorderGroup": "ap-northeast-2",
    "Domain": "vpc"
}

  • 할당된 EIP와 인스턴스 연결(aws ec2 associate-address)
> aws ec2 associate-address --allocation-id eipalloc-0313ee548d683413a 
	--instance-id i-0a12243dea8c2eab6
    
(결과)
{
    "AssociationId": "eipassoc-04fe7116b36aa74cb"
}    

  1. 인스턴스 정보 확인
  • aws ec2 describe-instances (인스턴스 리스트 전체)

  • aws ec2 describe-instances --instance-id [인스턴스 id]

** 참고 문서

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/

주의사항 !!!

  • 키페어 유실 시 해당 키페어를 사용하는 인스턴스는 백업 이미지를 생성한 후에
    다시 백업 이미지를 이용한 인스턴스를 생성하여 사용해야 한다.

  1. EC2 정지, 삭제, 재시작
- 정지(stop-instances)
> aws ec2 stop-instances --instance-ids i-0a12243dea8c2eab6


- 삭제(terminate-instances)
> aws ec2 terminate-instances --instance-ids i-0a12243dea8c2eab6


- 재시작(reboot-instances)
> aws ec2 reboot-instances --instance-ids i-0a12243dea8c2eab6


- 시작(중지 상태의 인스턴스 : start-instances)
> aws ec2 start-instances --instance-ids i-0a12243dea8c2eab6

profile
Do your best every moment

0개의 댓글