쉘 스크립트 사용해보기

한창희·2022년 1월 7일
0

< 쉘 스크립트?? >

  • 쉘을 사용해서 리눅스, Mac OS 환경에서 기초적인 프로그래밍이 가능
  • 다양한 자동화 작업을 위해 기본적으로 익혀두면 좋다고 한다

< 그럼 쉘은..?>

  • Shell
  • OS와 대화하는 프로그램
  • 종류는 여러 가지 존재, bash 사용 예정
  • 맥 사용자는 zsh를 사용하는 것도 좋다고 한다

< 쉘 스크립트 사용해보기 >

먼저 빈 폴더를 생성 후 git bash를 통해 쉘 스크립트를 생성해보도록 하겠다

우선 리눅스 편집을 위해 vi를 사용한다
이 외에 nano, gedit 등이 있지만 이번에는 vi를 사용한다

빈 폴더에 HelloShell 이라는 쉘 스크립트를 생성 후 :q 를 통해 vi를 종료한 모습이다

하지만 현재 디렉토리에는 아무것도 없다고 나온다..
혹시 :wq로 저장을 했어야 되나 싶어서 다시 쉘 스크립트 생성 후 이번에는 :wq로 종료를 해보겠다

예상대로 이번에는 정상적으로 저장이 되었다

이 스크립트로 들어가 기능을 추가해보겠다
다시 vi HelloShell.sh 를 입력 후 해당 스크립트 편집으로 들어간다

첫 줄에는 #!/bin/bash 를 작성해야 한다
이게 무슨 뜻일까..? -> https://injunech.tistory.com/116
설명이 나와있는 링크를 첨부하겠다

echo는 문자열을 출력하고 자동으로 줄바꿈을 해준다
:wq 로 저장을 하고 이 스크립트를 실행시켜 보겠다


실행을 위해서는 권한을 변경해줘야 하고, 실행 시 ./ + 파일명으로 실행이 가능하다
입력했던 문자열이 출력되는 것을 볼 수 있다



< 쉘 스크립트로 디렉토리 생성하기 >

쉘 스크립트 문법을 통해 디렉토리를 추가로 생성해보겠다

쉘 스크립트에서도 조건문을 사용할 수 있었다
day1 이라는 디렉토리 (-d, 파일이었다면 -f)가 존재하는지 검사하고 없다면 mkdir을 통해 day1 이라는 이름으로 디렉토리를 생성한다


위와 같이 현재 경로에 day1 이라는 폴더가 생성된 것을 알 수 있다

현재 상태에서 다시 스크립트를 실행시키니 day1 디렉토리가 이미 존재하는 것을 감지하여 해당 문구가 출력된 것을 볼 수 있다

< 반목문 사용해보기 >

이번엔 반복문을 통해 day+ '현재 반복횟수' 형식으로 여러 디렉토리를 생성해보겠다


반복문을 다르게 나타내는 방법이 있지만 기존에 다른 언어에서 반복문을 사용했을 때와 형태가 비슷하고 직관적이라 생각해서 위와 같은 방법을 사용했다

16번 반복을 하게되고 각 반복에서 반복횟수를 이름에 포함시켜 폴더를 생성했다
day1은 이미 존재하므로 해당 문구가 출력되었고 나머지 폴더는 정상적으로 생성이 되었다

< 파일 생성하기 >

이번에는 위에서 생성한 각 폴더에 랜덤한 개수로 파일을 생성해보록 하겠다

https://nirsa.tistory.com/122
난수를 생성하는 부분은 위 글을 참고했다

우선 난수를 생성하는 기능을 연습했다
주의할 점은 rannum 변수명을 적고 띄어쓰기 후 =을 했더니 할당이 되지 않아 계속 오류가 발생했다
처음에 문법은 틀린게 없는데 왜 오류가 나지 하면서 계속 삽질을 했는데 공백 문제였다..


또한 %3 처리를 통해 0,1,2 세 가지 수만 나올 수 있게 구현했다

난수가 반복적으로 생성된 것을 볼 수 있다


폴더 생성 후 해당 폴더로 이동한 다음 0,1,2 중 나온 개수 만큼 빈 .cs 파일을 생성한다
cs 파일 생성 후에는 이전 경로로 다시 빠져 나온다

touch 명령어는 빈 파일을 생성할 때 사용하는 명령어이다

day14 폴더 내부인데 생성된 난수가 2이므로 2개의 파일이 생성된 것을 볼 수 있다

< 파일 압축하기 >

위에서 생성한 day1 ~ day16 폴더를 하나의 압축파일로 만들어보도록 하겠다

(bash에서 zip 안되는 경우!!!)
https://velog.io/@proshy/git-bash-zip%EB%AA%85%EB%A0%B9%EB%AC%B8%EC%9D%B4-%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80-%EC%95%8A%EC%9D%84-%EB%95%8C
zip 명령어가 계속 안되길래 다시 삽질을 하던 도중 zip 자체를 사용하는데 있어 문제가 있었다... 위 링크를 통해 그래도 해결할 수 있었다


cs파일이 없는 day폴더의 경우 비어있다는 메세지를 출력하도록 했다
zipstr은 마지막에 압축명령어에 해당하는 문자열이고 추가할 파일의 경로를 반복적으로 이어 붙여준다


정상적으로 압축파일이 생성된 것을 알 수 있다


이제 이 압축한 파일을 이전에 만든 우분투 가상환경으로 전송을 해보도록 하겠다

profile
매 순간 최선을 다하자

0개의 댓글