리눅스는 유닉스 기반의 운영체제로 하드웨어를 효율적으로 관리해주고
사용자에게 편의성을 제공해주는 커널과 이러한 커널을 사용할 수 있게 셸이나 X 윈도를 제공한다.
셸은 사용자가 입력한 문장을 분석해서 명령을 실행하는 인터프리터라고 볼 수 있다.
셸은 여러 종류거 있는데 리눅스는 bash라는 셸을 사용한다.
리눅스의 시스템 호출을 이용해서 프로그램을 작성할 수 있는 것과 같이,
셸도 자동화 등을 위한 프로그래밍을 제공한다.
스크립트 기반의 프로그래밍도 가능한데, 이러한 셸 스크립트 프로그래밍을 셸 프로그래밍이라고 한다.
라즈베리파이 화면을 따로 연결하지 않고 터미털창을 이용하기 위해 putty 프로그램을 사용중이다.
현재 시스템에서 지원하는 셸을 확인하는 명령어이다.
/etc/shells
X 윈도가 나오기 전에는 셸로 리눅스를 이용했는데, 키보드를 이용해서 직접 명령어를 타이핑해야만 했다.
반복적인 작업을 수행하는 경우에 이러한 작업을 효율적으로 지원하기 위한 프로그래밍이다.
셸 프로그램을 이용하면 많이 반복되는 여러 명령어의 실행이나
C 언어 등으로 만들 수 있는 간단한 코딩을 보다 쉽게 할 수 있다.
셸 스크립트는 일반적으로 .sh라는 확장자를 가지고 있으며, 첫 줄은 #!/bin/sh 로 시작한다.
#는 주석을 의미하고, 이 주석을 이용해서
지시어로 셸 스크립트를 실행할 때 사용할 셸을 지정할 수 있다.
그리고 화면에 메세지를 출력하고 싶으면 유닉스의 echo 명령어를 이용하면 된다.
애플리케이션들이 모두 실행 파일인 것과 같이 셸 스크립트 파일도 실행 권한이 있어야만 실행할 수 있다.
chmod 명령어를 이용해서 실행 권한을 부여하고 스크립트 파일을 실행하면 된다.
echo 명령어는 C 언어에서 사용하는 printf 명령어를 이용해서 변경할 수도 있다.
셸 스크립트도 C 언어와 같이 반복문 ( 순환문 ) 이나 조건문과 같은 제어 구조를 제공한다.
반복문은 for 문과 while 문, 그리고 until 문을 제공하고, 조건문은 if 문을 제공한다.
숫자(인덱스)가 증가하거나 감소하는 반복 구조를사용하는 경우에 이용하는 반복문이다.
for 문의 형식
for 변수 in 변숫값리스트 do 명령어 리스트 done
변수는 변숫값 리스트에서 넘어오는 값을 저장하기 위한 공간이며,
이 변수는 다음의 do ~ done 사이의 명령어 리스트에서 사용할 수 있다.
변숫값 리스트는 $(명령어)를 이용해서 명령어의 실행결과를 사용할 수도 있다.