스크립트의 구조
vi script.sh
스크립트는 .sh 확장자를 갖는다.
[+] 참고 : Linux에는 확장자 개념이 존재하지 않는다. 다만, 사용자의 편의성을 위해 확장자처럼 보이도록 파일명을 지을 뿐이다.
#!/bin/bash
스크립트의 맨처음에는 셔뱅(Shebang)이 온다.
Bash 쉘의 경로를 지정해준다.
# 주석 : 'hello world!' 출력
주석은 #으로 단다.
echo hello world!
Linux 명령어가 스크립트에 그대로 사용될 수 있다.
실행권한
스크립트 실행 권한 부여 방법
chmod u+x script.sh
환경변수
Linux는 윈도우와 다르게 linux는 입력된 명령어를 환경변수에서 명령어를 검색한다.
즉, 현재 디렉토리(pwd)는 전혀 검색하지 않는다.
환경변수는 명령어 env 또는 echo $PATH를 통해 조회할 수 있다.
env
..
..
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
따라서 script.sh를 실행해도 스크립트 실행이 되지 않는다. script.sh가 위치한 경로가 환경변수에 등록되어 있지 않기 때문이다.
>> script.sh
script.sh: command not found
그래서 명령어에 script.sh가 위치한 경로를 아래와 같이 명시해줘야 한다.
>> ./script.sh
hello world!
변수 다루기
Linux 스크립트에서 변수는 '문자열'을 저장한다.
변수선언
변수명=값
주의할 점은 등호(=) 앞뒤에 공백이 있어서는 안된다.
예시
variable.sh ############
myblog=bithub
echo $myblog
########################
bithub
변수 작명 규칙
1. 변수의 이름은 숫자로 시작할 수 없다.
2. 언더바(_)를 제외하고 특수 문자 또는 공백 문자를 사용할 수 없다.
3. 알파벳 대소문자, 숫자, 언더바만 사용할 수 있다.
4. 대소문자를 구분한다.
123myblog (x)
_myblog (o)
my+blog (x)
myBlog (o)
my_blog (o)
myblog ↔ MYBLOG
[+] 참고 : myBlog처럼 대소문자로 단어를 구분하는 방식을 'camel case'라고 한다.
[+] 참고 : my_blog처럼 언더바(_)로 단어를 구분하는 방식을 'snake case'라고 한다.
변수확장 - 언제나 헷갈리는 { }, " ", ' ', \
echo $myblog
>> bithub
echo ${myblog}
>> bithub
echo "$myblog"
>> bithub
echo '$myblog'
>> $myblog
# 작은 따옴표는 단순 문자로 해석된다.
echo " '$myblog' "
>> 'bithub'
# 작은 따옴표가 큰 따옴표 안에 있으므로 단순 문자로 해석된다.
echo \$myblog
>> $myblog
# 백슬래쉬(\) 다음에 오는 문자는 단순 문자로 해석된다.
echo '*'
>> *
echo \*
>> *
# \다음에 오는 문자는 단순 문자로 해석된다.
echo *
>> script.sh variable.sh...
# 현재 디렉토리(pwd)의 파일들이 출력된다.
echo "bit hub"
>> bit hub
# 큰 따옴표는 공백도 다 포함한다.
echo -e "bit\nhub"
>> bit
>> hub
# 큰 따옴표는 제어문자를 인식하게 한다. 단, echo 사용 시 제어문자 해석을 위한 -e 옵션을 사용해야한다.
echo "*"
>> *
# 큰 따옴표는 와일드카드를 확장하지 않는다. 단, 명령어와 변수는 확장한다.
echo "a{1,2,3}"
>> a{1,2,3}
# 큰 따옴표는 와일드카드를 확장하지 않는다. 단, 명령어와 변수는 확장한다.
echo "$(date)"
>> Fri Mar 14 15:29:49 KST 2024
# 큰 따옴표는 명령어와 변수를 확장한다.
echo "`date`"
>> Fri Mar 14 15:29:49 KST 2024
# 큰 따옴표는 명령어와 변수를 확장한다.
echo "bit"hub""
>> bithub
# 큰따옴표 안에 있는 큰따옴표는 출력되지 않음. 큰따옴표 안에 있는 큰따옴표를 출력하려면 백슬래쉬(\) 사용
간단하게 큰따옴표는(" ")는 와일드카드와 중괄호를 제외하고 모든 것(명령어, 변수)을 확장한다고 생각하면 쉽다.
* 참고로 { }는 와일드카드가 아니다.
즉, 평상 시에는 큰따옴표(" ")를 쓰는 습관을 들이면 \n, \t, 여러 공백( ) 모두 원하는대로 출력된다.
단, 문자 그대로 출력하길 원할 때만 작은따옴표(' ')를 쓰면 된다.
명령어확장
$() 또는 `명령어`를 이용하여 명령어 확장을 할 수 있다.
예제
today=$(date) # today=`date`
echo $today
>> Tue Mar 22 11:34:01 KST 2024
산술확장
$(())를 이용하여 연산식을 확장 할 수 있다.
예제
result=$((10 + 5))
echo $result
echo $(($result + 1))
echo $((result + 1))
참고로 산술식 안에서 변수 사용 시 $ 기호를 생략할 수 있다.
즉, echo $((result + 1))와 등가다.
* 주의 : 실수 연산을 불가능하다. 실수 연산은 bash calculator를 사용해야 한다.* 제곱 : ** (ex) 3**2 = 9
중괄호확장
<< echo a{1,2,3}
>> a1 a2 a3
<< echo a{0..9}
>> a0 a1 a2 a3 a4 a5 a6 a7 a8 a9
+번외. [ ]와 { }의 차이
[]은 와일드카드, {}은 중괄호다.
와일드카드는 "특정 문자열을 찾을 때" 사용된다.
중괄호는 "단순한 패턴의 긴 문자열을 쉽게 생성할 때" 사용된다.
예를 들어,
echo a[123]
위 명령어는 파일 이름 a로 시작하고 1~3으로 끝나는 파일을 찾는데 사용된다.
echo a{123}
위 명령어는 단순히 echo a1 a2 a3를 일일이 치기 너무 귀찮으니까 줄여서 echo a{123}으로 줄여놓은 것이다.
입력받기
read 명령어를 사용하여 사용자로부터 입력을 받아 변수에 저장할 수 있다.
read -p 'input your blog name : ' yourblog
echo "Your blog name is $yourblog."
>> input your blog name : bithub
>> Your blog name is bithub.
'Linux' 카테고리의 다른 글
Linux 자주 사용되는 명령어 (0) | 2024.03.14 |
---|---|
Linux 스크립트 if문, 반복문, 트랩 (0) | 2024.03.14 |
Linux 셸, 커널의 의미와 리눅스의 역사 (0) | 2024.03.14 |
Linux vim 편집기 (0) | 2024.03.14 |
Linux 프로그램, 프로세스, 쓰레드 (0) | 2024.03.14 |