Shell Script

Shell Script 기초(4)

사실 나도 모름 2023. 11. 24. 01:37
  1. Positional Parameters
  2. 실습

1. Positional Parameters

위치값을 가지는 매개변수를 의미한다.

한가지 예를 들면 다음과 같다.

 

cp   /etc/passwd   /home/ubuntu/

$0            $1                     $2

 

위와 같이 $1, $2 .... 등으로 명령어를 실행했을 때 주어진 매개변수를 위치값으로 치환하여 스크립트로 전달할 수 있다.

매개변수가 1 ~ 9개 까지는 그냥 숫자만 쓰면 되지만 10번째 부터는 ${10} 으로 중괄호로 묶어줘야한다.

 

대략 표로 나타내면 다음과 같다.

Positional Parameters
Name of shell script $0
First argument $1
Second argument $2
Tenth argument ${10}
Number of argument $#
List of all parameters $@, $*
Special Shell Variables
로그인 shell의 PID $$
현재 작업 디렉토리 $PWD
부모 프로세스의 ID $PPID

 

 

 

 


2. 실습

parameter-exam1.sh
### parameter-exam1.sh 아래 내용부터 입력
#!/bin/bash
#: Usage        : parameter-exam1.sh    arg1    arg2    arg3
echo "The script name : $0"
echo "The first argument : $1"
echo "The second argument : $2"
echo "The number of argument : $#"
echo "The list of argument : $@"
echo "The list of argument : $*"

# parameter-exam1.sh red blue 실행 결과
The script name : /home/apple/bin/parameter-exam1.sh
The first argument : red
The second argument : blue
The number of argument : 2
The list of argument : red blue
The list of argument : red blue

 

red와 blue라는 argument를 입력함으로 표에 나온 명령을 사용하면 위와 같이 결과를 출력한다.

스크립트의 이름은 절대경로로 출력된다.

positional parameter에서 일반적으로 많이 쓰이는 명령은 '$#' 매개변수의 수를 출력하는 것이다.

 

 

parameter-exam2.sh
### parameter-exam2.sh 아래 내용부터 입력
#!/bin/bash
#: Usage        : parameter-exam1.sh    directory_name
#: Author       : apple
echo "[$1 Directory]"
echo "================================================"
date +%Y-%m-%d
echo "================================================"
du -sh $1 2> /dev/null
echo

# parameter-exam2.sh /usr/bin 실행 결과
[/usr/bin Directory]
================================================
2023-11-23
================================================
110M    /usr/bin

 

디렉토리를 매개변수로 받아서 해당 디렉토리의 용량을 출력하는 스크립트다.

Positional Parameters를 사용함으로 스크립트 하나로 원하는 정보를 매개변수만 바꿔서 각각 확인할 수 있는 장점이 생긴다.

 

 

parameter-exam3.sh
#!/bin/bash
#: Usage :	parameter-exam3.sh [directory path]
ls -al "$1" 1> /tmp/$(date +%Y%m%d).txt
echo "The directory '$1' has been stored in /tmp."

# parameter-exam3.sh /home/apple/bin 실행 결과
The directory '/home/apple/bin' has been stored in /tmp.

 

디렉토리를 매개변수로 받아서 해당 디렉토리 내 리스트를 /tmp에 날짜.txt 형태로 저장하는 스크립트다.

 

 

backup-exit.sh
#: Description :        Automatically has stored Backup Files in ~/backup
#: Usage :                      backup-exit.sh [Source Directory]
echo "Starting the Directory '$1' backup......"
mkdir ~/backup 2> /dev/null
cp -r "$1" ~/backup/$(date +%Y%m%d)
history > ~/backup/$(date +%Y%m%d)/history.txt
echo "Directory '$1' Backup Complete!!"
echo "Your Backup Directory is named '$(date +%Y%m%d)' and is located in ~/backup"
echo "Exit after 5 seconds"
sleep 5 && kill -9 $PPID

# backup-exit.sh ~/bin 실행 결과
Starting the Directory '/home/apple/bin' backup......
Directory '/home/apple/bin' Backup Complete!!
Your Backup Directory is named '20231123' and is located in ~/backup
Exit after 5 seconds

─────────────────────────────────────────────────────────────────────────────────────────────

Session stopped

 

원하는 디렉토리를 현재 세션의 history와 함께 ~/backup 디렉토리에 백업한 후 세션을 종료하는 스크립트다.

backup-exit.sh 스크립트는 따로 실습용으로 만들어 본 것일뿐이며 원하는 동작을 스크립트로 스스로 구성하여 만들어보면 좋다.

 

 


 

아래 영상을 참고하였다.

https://youtube.com/playlist?list=PLApuRlvrZKog2XlvGJQh9KY8ePCvUG7Je&si=81LmyQJGZOp3cElF

 

[따배셸] 셸 프로그래밍 시리즈

 

www.youtube.com

 

'Shell Script' 카테고리의 다른 글

Shell Script 보안 - 코드 인젝션 취약점  (0) 2023.11.24
Shell Script 기초(5)  (0) 2023.11.24
Shell Script 기초(3)  (0) 2023.11.23
Shell Script 기초(2)  (0) 2023.11.22
Shell Script 기초(1)  (0) 2023.11.22