Skip to main content Link Menu Expand (external link) Document Search Copy Copied

created at 2025-03-30

Table of contents

  1. 계정 변경 스크립트 세팅
  2. 쉘 스크립트
    1. 함수
    2. IF 문

AWS 프로필이 dev, stage, 여러 prod, etc. 여러개가 있는데 매번 빠르게 옮겨다니기 너무 귀찮아서 작성. IAM 기본 credential default 바라보게만 만들고 이제 명령어 딸각하고 vpn 만 바꿔주면 자원 접근 가능.

이번에 aws 계정변경 스크립트를 alias 에 등록해놓고 쓸려고 여느때와 마찬가지로 gpt 에 던져서 작성했지만 해결못해줌. 그래서 혼자 이쁘게 작성해볼려했지만 쉘 스크립트에 대한 기본지식이 부족했음.

스크립트는 쓸 일이 너무 많은데 정작 베드락을 공부하지 않았던 것임. 이참에 맨날 쓰는 것들 정리!

이에 앞서 aws 계정변경 스크립트는 아래와 같음. 매우 단순하며 .aws/credentials 에 있는 default 프로파일을 미리 세팅해놓은 프로필로 변경해주는 스크립트.

계정 변경 스크립트 세팅

  1. aws_profile_change.sh
#!/bin/bash

if [ -z "$1" ]; then
    echo "HELP: $0 <PROFILE_NAME>"
    exit 1
fi

CREDENTIALS_FILE="$HOME/.aws/credentials"
AWS_PROFILE=$1

is_valid() {
    local retval=0
    if [[ ! -f "$CREDENTIALS_FILE" ]]; then
        echo "$retval"
        return 0
    fi

    if grep -qx "^\[$AWS_PROFILE\]$" "$CREDENTIALS_FILE"; then
        retval=1
    fi

    echo "$retval"
}

get_aws_credentials() {
    local retval=$( is_valid )

    if [ "$retval" = "0" ]; then
        echo "$retval"
        return 0
    fi

    # Access Key 추출
    local access_key=$(sed -n "/^\[$AWS_PROFILE\]/,/^\[/p" "$CREDENTIALS_FILE" | grep "aws_access_key_id" | awk -F'=' '{print $2}' | tr -d ' ')
    
    # Secret Key 추출
    local secret_key=$(sed -n "/^\[$AWS_PROFILE\]/,/^\[/p" "$CREDENTIALS_FILE" | grep "aws_secret_access_key" | awk -F'=' '{print $2}' | tr -d ' ')

    echo "$access_key $secret_key"
}

update_aws_profile() {
    local creds
    creds=$(get_aws_credentials)
    

    if [ "$creds" = "0" ]; then
        echo "cannot find [$AWS_PROFILE] profile in $CREDENTIALS_FILE"
        exit 1
    else
        local access_key=$(echo "$creds" | awk '{print $1}')
        local secret_key=$(echo "$creds" | awk '{print $2}')

        aws configure set aws_access_key_id "$access_key" --profile "default"
        aws configure set aws_secret_access_key "$secret_key" --profile "default"

        echo "[default] profile is updated by [$AWS_PROFILE] profile"
    fi
}

update_aws_profile

  1. mac 이라서 zsh 의 기본 PATH 에 bin 패스 추가
mkdir -p ~/bin
cp ~/scripts/aws_profile_change.sh ~/bin/aws-profile 
chmod +x ~/bin/aws-profile

echo 'export PATH="$HOME/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
  1. execute!
ghkdqhrbals@ghkdqhrbalsui-MacBookPro scripts % aws-profile prod
[default] 프로파일이 [prod] 프로파일로 업데이트되었습니다.

쉘 스크립트

함수

  • 함수 내에서 사용하는 return 은 일반적인 return 이 아니라 exit code 라고 보면 됨. 0 ~ 255 사이 종료코드 중 어떤 것을 내보낼 지 선택하는 것임. 0은 정상종료코드.
  • 여러가지 방법으로 부모스택에 리턴값(string)을 전달가능. 그 중 가장 자주쓰는건 echo 로 출력하는 방법.
    1. 객체 이런거 없기때문에 여러개 리턴할려면 echo 로 출력 후 awk $1 $2 로 받아서 사용
    2. $? : 바로 직전 명령어의 exit code 반환. 그래서 함수 호출 후 바로 $? 로 확인 가능.
  • local 로 변수 중복을 막아주자!

IF 문

  • ”” 값 true, “1” 들어가면 true 로 분기되어서 빈 값을 넣어줘야함.
  • if 조건문에 [] 필수. (()) 산술연산 전용.
  • if [ -z “$1” ] : $1 이 비어있으면 true