- Positional Parameters
- 실습
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
'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 |