해당 내용은 Datacamp의 Data engineering track을 정리했습니다.
Introduction to Bash Scripting의 chapter 1에 대한 내용입니다.
해당 포스팅에는 아래의 내용을 포함하고 있습니다.
- Bash script 작성법
- streams & arguments
1. Introduction and refresher
Bash가 무엇이며, 왜 중요할까요? Bash는 오래전에 개발되었지만 현재에도 매우 인기있는 쉘입니다. Bash는 명령을 하나씩 복사하여 붙여넣는 것 대신 단일 명령으로 프로그램을 저장하고 실행할 수 있습니다. Bash를 공부하기 위해서는 grep, cat, sed과 같은 기본 명령어를 알고 있는 것이 좋습니다. grep은 정규표현식 패턴 일치 여부를 확인하여 다른 프로그램이나 명령에서 입력한 내용을 필터링할 수 있습니다. cat은 파일 내용을 줄 단위로 열 때 사용합니다. head와 tail은 파일 앞 뒤의 정보를 제공합니다. wc는 단어나 줄 수를 계산할 수 있습니다. sed는 정규표현식 일치 여부를 통해 문자열을 대체하도록 합니다. 정규표현식은 Bash scripting에서 유용하게 사용됩니다. 다양하게 연습해보려면 https://regex101.com/ 사이트에서 할 수 있습니다.
2. Your first Bash script
Bash script를 작성할 때에는 몇 가지 기억할 것들이 있습니다. 첫 번째로 #!/usr/bash처럼 bash의 경로에 대한 정보를 입력해줘야 합니다. 가장 기본적으로 bash의 위치는 /usr/bash에 있는 것이 일반적입니다. 만약, 어디에 bash가 존재하는 지 확인하고 싶다면, which 명령어로 확인할 수 있습니다. 스크립트 중간에는 command-line 명령어가 포함되어 있습니다. script는 기본적으로 .sh 확장자명을 가집니다. 이 스크립트를 실행하고 싶다면, bash 파일명.sh 로 실행할 수 있고, 추가적으로 인수가 포함되어야 할 경우 공백을 두고 추가 인수들을 작성하면 됩니다.
3. Standard streams & arguments
Bash script에 존재하는 stream에는 stdin, stdout, stderr 3개가 존재합니다. stdin과 stdout은 프로그램에서의 input과 output을 말합니다. stderr는 프로그램 오류 및 예외가 기록되는 곳입니다.
stdout과 stdin은 위의 그림처럼 연쇄적으로 발생하게 됩니다.
argument는 bash script에서 굉장히 중요한 부분입니다. 인수들은 파일명 뒤에 추가하는 것들을 의미하게 됩니다. 공백을 기준으로 1부터 차례대로 순서를 갖습니다. bash script 내에서는 $1, $2 처럼 인수가 포함될 수 있습니다. 또한 $@($*)는 모든 인수들을 출력하며, $#은 모든 인수의 개수를 파악할 때 사용합니다.
#!/usr/bash
echo $1
echo $2
echo $@
echo "There are " $# "arguments"
> bash script.sh cat dog tiger lion
# result
cat
dog
cat dog tiger lion
There are 4 arguments