모든 실습은 우분투에서 실시하였음
이번 쉘 스크립트 작성은 vim 명령어를 통해서 작성함
✳️ Shell script
- 리눅스에서 사용하는 command line을 나열한 것
- 프로그래밍 언어처럼 변수, 조건문, 반복문, 주석과 같은 기능들이 존재
- 실무에서는 shell script를 이용해 다른 프로그래밍 언어를 서로 연결하여 실행하거나 간단한 반복 작업들을 쉽게 linux command line으로 작성하여 실행함
- 쉘 스크립트는 echo를 사용하여 화면에 글자를 출력시킴
✳️ Hello World
🪄 시작할 때 꼭 써보는 Hello World를 출력하는 shell script를 작성해보자!
🔵 vim hello.sh
- vim을 이용해서 hello.sh라는 문서에 요구하는 내용을 작성할 것!
🟡 난 쉘 스크립트야!
- #!는 셔뱅이라고 읽는다.
- #!/bin/bash는 쉘 스크립트라고 선언하는 문장이다.
🟡 echo 이용
- 문자열을 출력을 위해 echo를 이용한다.
🔵 shell script 실행 - bash
- bash 작성한 스크립트 이름
🔵 bash 명령어 없이 바로 수행은 실행 권한 부여 필수!
- chmod를 이용해서 실행권한 주기! (775)
✳️ 변수
🪄 현재 경로를 curr_dir 이라는 변수에 넣고,
🪄 Current directory: [현재 작업 디렉터리] 로 출력하는 쉘 스크립트를 작성해보자!
🔵 vim get_curr_dir.sh
- vim을 이용해서 get_curr_dir.sh라는 문서에 요구하는 내용을 작성할 것!
🟡 변수 선언
- 변수이름=값 으로 선언
- 다른 언어와 다르게 반드시 변수이름=값 사이에 공백이 있으면 안됨!
- back quote이라고 하는 ' ` ' 문자는 `리눅스 명령어` 를 실행해주는 역할을 함
✳️ 명령행 인자 (command line argument)
- 쉘에서 사용자는 새로운 프로세스를 실행하면서 인자를 전달할 수 있다.
- 프로세스를 실행하면서 전달하는 인자를 명령행 인자(Command Line Argument)라고 부른다.
💟 명령행 인자 종류
- 명령행 인자의 종류는 3가지 종류로 구분할 수 있다.
# 위치 인자(Positional argument)
$0, $1, $2, ... ${10}, ${11} ...
# 인자의 개수
$#
# 인자 전체
$@
$*
- 간단한 예시를 통해 어떻게 출력이 되는지 확인
#!/bin/bash
#첫번째, 두번째, 세번째 인자
echo "$0"
echo "$1"
echo "$2"
#인자의 개수
echo "$#"
#모든 인자를 별도의 단어로
echo "$@"
# 모든 인자를 하나의 단어로
echo "$*"
▼ 참고 내용
🪄 bash hello.sh [이름] 을 입력하게 되면 Hello [이름] 이 나오도록 쉘 스크립트를 작성해보자
🟡 $1, ${name}
- name이라는 변수에 명령행 인자 위치를 지정해준다.
- 변수를 다시 불러 올때는 ${변수명}으로 작성해주면 된다.
🔵 argument 넣어서 실행
- 쉘 스크립트를 수행할 때 공백을 기준으로 문자를 넣어주면 $1에 첫 번째 argument로 지정이 된다.
(그래서 웬만하면 파일 이름이나 인자 이름 같은 것들에는 공백이 없이 작성)
🔵 $#로 인자가 몇 개인지 확인하기
🔵 argument 여러 개
- 만약 두 번째 세 번째 argument가 있다면 $2, $3로 들어가게 된다.
✳️ 조건문
🪄 command line argument로 유전자 이름을 받도록 하고,
🪄 입력된 유전자가 A로 시작하면 true, 아니면 false로 출력하는 쉘 스크립트를 작성해보자
🟡 command line argument 지정
- gene을 첫 번째 인자에 넣었다.
🟡 조건문
- 조건문은 if ;then else fi로 구성
- 조건문을 자세히 보면 slicing을 이용해서 유전자 이름의 시작이 'A'로 시작하는지 판별했다.
- 띄어쓰기 잘하기..!
❓bash 에서 slicing하기
- length를 입력하지 않으면 offset부터 문자열 끝까지 자르게 됨
${STR:offset:length}
str="Hello, World!"
echo "${str:0:5}" ## Hello
echo "${str:7}" ## World!
- 문자열 뒤에서 자르기, offset이 음수면 뒤에서 offset을 계산
str="Hello, World, Bash!"
echo "${str:(-5)}"
▼ 문자열 slicing에 대한 참고 내용
🔵 인자로 유전자 이름 넣고 판별
- APOE와 TP53을 넣어 보면 A로 시작하는 APOE는 True로 출력되고 TP53은 False로 출력되는 것을 확인 할 수 있다.
✳️ 반복문
🪄 먼저 vim genelist.txt 를 이용해서 유전자들이 들어 있는 텍스트 파일을 형성하자.
🪄 genelist.txt 파일의 내용을 읽어서 각 유전자 이름을 출력하고 해당 유전자가 A로 시작하면 true, 아니면 false를 출력하는 쉘 스크립트를 작성해보자
🔵 vim forloop.sh
- forloop.sh라는 파일에 반복문과 조건문을 활용해서 작성 하기로 한다.
🟡 cat [파일 이름], for loop
- cat으로 파일 내 모든 내용들을 출력
- for에서 지정한 변수에 값이 들어간다.
- shell에서 for문은 do를 입력해줘야한다.
- 여기에서는 gene이 된다!
🔵 shell script 실행
✳️ 주석(comment)
- 주석을 활용하면 다른 사람들에게 code를 보여 줬을 때 이해하기 편리
- 나 자신에게도 도움이 됨
- 주석은 스크립 수행에 영향을 주지 않음
🪄 주석을 달아서 스크립트 내용에 대한 부연설명을 남겨보자
🔵 forloop.sh → comment.sh
- 파일 복사 후 작업해보았다.
🟡 #
- 주석을 달 때는 #으로 시작
'📒 Today I Learn > 🐧 Linux' 카테고리의 다른 글
[Linux] 프로그램 설치 (0) | 2024.09.03 |
---|---|
[Linux] 단축키 (0) | 2024.08.30 |
[Linux] 리눅스 명령어 (2) (0) | 2024.08.28 |
[Linux] 리눅스 명령어 (1) (0) | 2024.08.28 |
[Linux] 절대 경로 및 상대 경로 (0) | 2024.08.27 |