1. 셸 스크립트
- 셸 스크립트 실행방법
bash testScript
셸의 인자로 넘겨 실행하는 방법
./testScript
자체적으로 실행하는 방법
- #! 매직넘버
유닉스는 파일 확장자를 붙이지 않는 것이 관례이기 때문에, 어떤 프로그램(인터프리터)로 해당 파일을 실행할지 애매할 수 있다. 이때 파일 맨 첫번째 줄에 #!<인터프리터 경로명>를 붙이면 해당 인터프리터로 파일을 실행시키라는 의미이다.
#!/usr/bin/bash를 붙이면 bash로 해당 파일을 실행시킨다.
- 주석
해당줄 맨 앞에 #을 붙이면 주석 처리된다.
2. 셸 변수
변수 표현
${name} | name 값 |
${name:-word} | name이 정의되어있으면 그 값, 아니라면 word에 명시된 값 |
${name:=word} | name이 정의되어있지 않거나 널이라면 word에 명시된 값. name의 값은 word로 저장된다. |
${name:+word} | name이 정의되어 있고 널이 아니라면 word값. name에 word가 반영되지는 않는다. |
${name:?word} | name이 정의되어 있고 널이 아니라면 그 값, 아니라면 word값을 출력하고 셸을 종료한다. |
명령행 인자
명령행 인자 | 의미 |
$0 | 셸 스크립트 이름 |
$1 - $9 | 명령행에 주어진 1 ~ 9번 포지션 인자 |
${10} | 10번째 포지션 인자 |
$# | 전체 포지션 인자 개수 |
$* | 모든 포지션 인자 |
$@ | $*와 같지만 큰 따옴표로 묶으면 달라짐 |
"$*" | "$1 $2 $3"으로 하나의 물자열로 취급 |
"$@" | "$1" "$2" "$3"으로 각각 독립적인 문자열로 취급 |
$? | 최근 실행된 명령의 종료 값 |
set -- | 모든 포지션 인자들을 삭제하거나 설정을 해지함 |
인용 부호
작은 따옴표(' ') | 모든 특수 문자들이 해석되는것을 막는다. |
큰 따옴표(" ") | 변수나 명령의 대체는 허용하지만 기타 특수 문자들이 해석되는 것은 막는다. |
역슬래시(\) | 단일 문자가 해석되는 것을 막는다. |
명령 대체
echo `date`
echo $(date)
명령의 출력을 변수로 지정하여 사용하는것. 백 쿼터(`)를 사용하여 명령을 대체한다.
위 명령 둘다 2024. 01. 27. (토) 03:37:03 KST 출력.
3. 입력
read의 사용 형식 | 의미 |
read x | stdin에서 항 행을 입력 받아 x에 저장 |
read first last | stdin에서 항 행을 입력 받아 첫 번째 단어를 first에 저장하고 나머지를 last에 저장 |
read -p prompt | prompt를 출력시키고 입력을 기다림. 입력된 값은 REPLY 변수에 저장 |
4. 연산자
(( ))을 사용하는 것을 기본으로 하고, 생략 가능한 연산들이 있다.
또는 let 내장 명령을 사용 가능하다. 하지만 let을 쓸 때는 공백이 포함되면 " "로 묶어야된다.
연산자 | 의미 | 예시 |
- | 음수(단항 연산) | x=-5 |
! | 논리 부정(not) | (( !x < y )) |
~ | 비트 반전(not) | ~y |
*,/,% | 곱셈, 나눗셈, 나머지 연산 | let y=3*5 |
+,- | 덧셈, 뺄셈 | let x=x+1 |
<<,>> | 비트 왼쪽 시프트, 오른쪽 시프트 | ((y=x<<2)) |
<=,>=,<,>,==,!= | 비교 연산 | ((x<y)) |
&,^,\ | 비트 AND, XOR, OR연산 | let "z=x^y" |
&&,|| | 논리 AND, OR | ((x<y||x==3)) |
= | 변수값 지정 | let z=1 |
*=,/=,%=,+=,==,<<=,>>=,&=,^=,!= | 단축 연산 | let z+=1 |
bash에서의 실수 연산 ↓
bash에서는 정수만 연산이 가능하고 실수 연산은 불가능하다.
실수 연산을 하고싶을 때는 bc나 awk를 사용하면 된다.
bc 사용법: 산술식 뒤에 파이프라인으로 계산식을 넘겨 사용한다. 기본적으로 정수가 결과로 나오지만, -l 옵션을 붙이면 실수로 결과값이 나온다.
#!/usr/bin/bash
a=4; b=3
result=`echo "$a/$b"|bc -l`
echo $result
결과:
$ ./test.sh
1.33333333333333333333
awk는 파일로부터 레코드를 선택하고, 선택된 레코드에 포함된 값을 조작하거나 데이터화하는 것을 목적으로 사용하는 프로그램이다. 이걸 쉘에서는 텍스트 데이터를 파이프라인으로 넘겨받아 패턴 매칭 여부 검사, 데이터 조작 및 연산을 할 수 있다. 특정 필드를 파라미터로 사용할 수 있다(space, tab으로 구분됨).
#!/usr/bin/bash
echo `free | grep Mem | awk '{print $1,$2,$3,$4}'`
결과 : Mem: 32780880 2379924 26878476
#!/usr/bin/bash
#남은 메모리 용량 퍼센트
echo `free | grep Mem | awk '{print $4/$2*100'}`
결과: 81.9728
5. 제어문
생략 가능한 문법은 <>로 묶었다.
- if ~ else ~ then 문
if [ 조건 ]
then
명령
<else
명령>
fi
또는
if [ 조건 ]; then 명령; <else 명령;> fi
- if ~ then ~ elif ~ else 문
if [ 조건1 ]
then
명령
elif [ 조건2 ]
then
명령
<else
명령>
fi
또는
if [ 조건1 ] 명령; then 명령; elif [ 조건2 ] 명령; then 명령; <else 명령;> fi
- for문
for 변수 in list
do
명령
done
#예시
for ((i=0;i<=9;i++))
do
echo $i
done
- while문
while [ 조건 ]
do
명령
done
- until문
until [ 조건 ]
do
명령
done
- select문
select [ 조건 ]
do
명령
done
- continue, break
continue는 반복문 안에서 사용되어 아래 명령을 실행하지 않고 다시 반복문의 처음으로 돌아간다.
break는 반복문 안에서 사용되어 반복문을 즉시 빠져나간다.
for, while, unitl, select에서 continue, break를 사용할 수 있다.
6. 함수
- 함수의 정의
function func_name
{
명령들
<return 리턴값>
}
7. 디버깅
'Linux > 기본기능과 명령어' 카테고리의 다른 글
grep, egrep, fgrep, find (0) | 2024.03.18 |
---|---|
스케줄 관리(cron, crontab) (1) | 2024.01.27 |
셸 변수와 환경 변수 (1) | 2024.01.26 |
man 명령 (0) | 2024.01.25 |
debian 이란? (0) | 2023.03.17 |