셸 스크립트는 다른 프로그래밍 언어와 마찬가지로 변수를 사용합니다. 변수는 스크립트 실행 도중 필요에 따라 정보를 저장하기 위해 사용됩니다.
변수는 내용을 받으면 생성됩니다. 스크립트의 실행이 끝날 때까지 또는 스크립트 작성자의 명시적 요청에 따라 유효한 상태를 유지합니다. 스크립트는 시작부터 끝까지 순차적으로 실행되기 때문에 변수가 생성되기 전에 변수를 호출할 수 없습니다.
변수는 스크립트가 끝날 때까지 계속 존재하므로, 스크립트 중에 변수의 내용을 변경할 수 있습니다. 내용이 삭제되면 변수는 활성 상태로 유지되지만 아무 내용도 포함하지 않습니다.
셸 스크립트에서 변수의 유형 개념은 가능하지만 매우 드물게 사용됩니다. 변수의 내용은 항상 문자나 문자열입니다.
#!/usr/bin/env bash
#
# Author : Rocky Documentation Team
# Date: March 2022
# Version 1.0.0: Save in /root the files passwd, shadow, group, and gshadow
#
# global variables 전역 변수
FILE1=/etc/passwd
FILE2=/etc/shadow
FILE3=/etc/group
FILE4=/etc/gshadow
# Destination folder 대상 폴더
DESTINATION=/root
# Clear the screen 화면 지우기
clear
# Launch the back up 백업 시작
echo "Starting the backup of $FILE1, $FILE2, $FILE3, $FILE4 to $DESTINATION:"
cp $FILE1 $FILE2 $FILE3 $FILE4 $DESTINATION
echo "Backup ended!"
이 스크립트는 변수를 사용합니다. 변수의 이름은 문자로 시작해야 하지만 어떤 문자나 숫자의 연속을 포함할 수 있습니다. 밑줄 "_"를 제외한 특수 문자는 사용할 수 없습니다.
일반적으로 사용자가 생성하는 변수는 소문자 이름을 가집니다. 이 이름은 너무 애매하거나 복잡하지 않도록 주의해서 선택해야 합니다. 그러나 변수가 프로그램에 의해 수정해서는 안 되는 전역 변수인 경우와 같이 변수에 대문자를 사용할 수 있습니다.
문자 =는 변수에 내용을 할당합니다.
variable=value
rep_name="/home"
= 기호 앞이나 뒤에 공백이 없습니다.
변수가 생성된 후에는 $ 기호를 앞에 붙여 사용할 수 있습니다.
file=file_name
touch $file
아래 예와 같이 변수를 따옴표로 보호하는 것이 좋습니다.
file=file name
touch $file
touch "$file"
변수의 내용에 공백이 포함되어 있기 때문에 첫 번째 touch는 2개의 파일을 생성하고 두 번째 touch는 이름에 공백이 포함된 파일을 생성합니다.
변수의 이름을 나머지 텍스트와 구분하려면 따옴표나 중괄호를 사용해야 합니다.
file=file_name
touch "$file"1
touch ${file}1
중괄호의 일관적인 사용을 권장합니다.
작은 따옴표의 사용은 특수 문자의 해석을 억제합니다.
message="Hello"
echo "This is the content of the variable message: $message"
Here is the content of the variable message: Hello
echo 'Here is the content of the variable message: $message'
Here is the content of the variable message: $message
#!/usr/bin/env bash
#
# Author : Rocky Documentation Team
# Date: March 2022
# Version 1.0.0: Save in /root the files passwd, shadow, group, and gshadow
# Version 1.0.1: Adding what we learned about variables
#
# Global variables 전역 변수
FILE1=/etc/passwd
FILE2=/etc/shadow
FILE3=/etc/group
FILE4=/etc/gshadow
# Destination folder 대상 폴더
DESTINATION=/root
## Readonly variables 읽기 전용 변수
readonly FILE1 FILE2 FILE3 FILE4 DESTINATION
# A folder name with the day's number 날짜가 포함된 폴더 이름
dir="backup-$(date +%j)"
# Clear the screen 화면 지우기
clear
# Launch the backup 백업 시작
echo "****************************************************************"
echo " Backup Script - Backup on ${HOSTNAME} "
echo "****************************************************************"
echo "The backup will be made in the folder ${dir}." echo "Creating the directory..." mkdir -p ${DESTINATION}/${dir}
echo "Starting the backup of ${FILE1}, ${FILE2}, ${FILE3}, ${FILE4} to ${DESTINATION}/${dir}:"
cp ${FILE1} ${FILE2} ${FILE3} ${FILE4} ${DESTINATION}/${dir}
echo "Backup ended!"
# The backup is noted in the system event log:
logger "Backup of system files by ${USER} on ${HOSTNAME} in the folder ${DESTINATION}/${dir}."
백업 스크립트 실행해보면:
$ sudo ./backup.sh
결과적으로:
****************************************************************
Backup Script - Backup on desktop
****************************************************************
The backup will be made in the folder backup-088.
디렉토리 생성 중...
Starting the backup of /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow to /root/backup-088:
Backup ended!