리눅스의 쉘 스크립트
쉘 프로그래밍을 위한 변수와 특수 변수
변수명 = 값
ex) # hello = 안녕하세요
$변수명, $(변수명)
#!/bin/bash
=> 실행하려는 스크립트를 지정하고 동작하게 해준다.
- 특수 변수 종류
$#
명령 입력 라인에서 입력된 인자의 갯수를 저장
$*
명령 입력 라인에서 입력된 인자 전체가 저장
$@
명령 입력 라인에서 입력된 인자 전체 저장
$!
쉘 프로그램이 실행되면서 실행시킨 백그라운드 프로세스 ID 값을 저장하는 변수
$?
최근 실행된 명령어의 리턴값을 저장하고 있다.
- 특수 변수의 사용 예시
- 환경 변수의 종류
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 [ 조건 ]
then
참일 경우 실행 내용
fi
**주의] 조건 부분인 "[ 조건 ]" 각 내용 사이에는 공백 이 존재함.
if문 스크립트 작성
if문 출력 결과
[형식]
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문
1-1. case문 사용 예시
1-2. case문 출력 결과
2-1. case문 사용 예시 2
2-2. case문 2 출력 결과
반복문
[형식]
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)
python 설치(예제의 경우 python3)
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
=> 이때 unzip이 not found이면 설치 - sudo apt install unzip
ls -ld aws*
sudo ./aws/install
aws --version 명령어 입력
AWS CLI를 사용하기 위한 설정
AWS 홈페이지에서 IAM을 검색
좌측 액세스 관리 탭에서 사용자 클릭
사용자 생성 버튼 클릭
4-1. 사용자 이름 설정
4-2. 권한 설정(필요한만큼)
4-3. 검토 및 생성
6-1. 액세스 키 생성
6-2. 액세스 키의 경우 Access Key/Secret Access Key 둘 다 생성된다.
CLI 명령창에 aws configure 입력
AWS CLI 설정
AWS Access Key ID(액세스 키)
AWS Secret Access Key(비밀 액세스 키)
Default region name(서울의 경우 ap-northeast-2)
Default output format : json
AWS CLI를 이용한 EC2 생성
[리눅스]
>aws ec2 create-key-pair --key-name test_cli_key --query "KeyMaterail"
--output text > test_cli_key.pem (test_cli_key.pem 생성확인)
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
(기본 필요 옵션)
--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
> aws ec2 create-tags --resources i-0fc7378442e12938a(인스턴스아이디)
--tags Key=Name,Value=First-ec2-CLI
aws ec2 allocate-address
(결과)
{
"PublicIp": "3.37.34.211",
"AllocationId": "eipalloc-0313ee548d683413a",
"PublicIpv4Pool": "amazon",
"NetworkBorderGroup": "ap-northeast-2",
"Domain": "vpc"
}
> aws ec2 associate-address --allocation-id eipalloc-0313ee548d683413a
--instance-id i-0a12243dea8c2eab6
(결과)
{
"AssociationId": "eipassoc-04fe7116b36aa74cb"
}
aws ec2 describe-instances (인스턴스 리스트 전체)
aws ec2 describe-instances --instance-id [인스턴스 id]
** 참고 문서
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/
주의사항 !!!
- 정지(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