소개
이 실습에서는 Linux의 sleep 명령어를 사용하는 방법을 배웁니다. 이 명령어를 사용하면 스크립트나 명령어 시퀀스 실행 중에 시간 기반의 일시 중지나 지연을 추가할 수 있습니다. 작업 간 대기 시간 생성, 사용자 상호작용 시뮬레이션, 스크립트 실행 흐름 제어 등 많은 스크립팅 작업에서 타이밍을 제어하는 능력은 필수적입니다.
이 실습을 마치면 sleep 명령어를 고정 값 및 변수와 함께 사용하여 Linux 셸 스크립트에서 유연한 타이밍 제어를 구현하는 방법을 이해하게 될 것입니다.
Sleep 명령어 이해하기
Linux의 sleep 명령어는 스크립트나 명령어 시퀀스의 실행을 지정된 시간 동안 일시 중지하는 간단하면서도 강력한 유틸리티입니다. 이는 셸 스크립트에서 명령어 사이에 지연을 만들어야 할 때 특히 유용합니다.
먼저 sleep 명령어의 기본적인 사용법부터 살펴보겠습니다.
먼저 프로젝트 디렉토리로 이동합니다:
cd ~/project
이제 터미널에서 직접 sleep 명령어를 사용해 보겠습니다. 다음 명령어를 입력하세요:
echo "Start time: $(date +%H:%M:%S)"
sleep 3
echo "End time: $(date +%H:%M:%S)"
이 명령어 시퀀스를 실행하면 시작 시간이 출력되고, 3초간 일시 중지된 후 종료 시간이 출력되는 것을 볼 수 있습니다. 출력 결과는 다음과 비슷할 것입니다:
Start time: 10:15:30
End time: 10:15:33
sleep 명령어의 기본 구문은 다음과 같습니다:
sleep NUMBER[SUFFIX]
여기서:
NUMBER는 대기할 시간입니다.SUFFIX는 선택 사항이며 다음과 같이 지정할 수 있습니다:s: 초 (접미사가 지정되지 않은 경우 기본값)m: 분h: 시간d: 일
다양한 시간 단위가 어떻게 작동하는지 몇 가지 예제를 시도해 보겠습니다:
## 5초 동안 대기
echo "Sleeping for 5 seconds..."
sleep 5
echo "Done!"
## 0.5초 동안 대기 (0.5초)
echo "Sleeping for half a second..."
sleep 0.5
echo "Done!"
이제 sleep 명령어가 기본적으로 어떻게 작동하는지 이해하셨을 것입니다. 다음 단계에서는 이를 셸 스크립트에 통합해 보겠습니다.
Sleep을 사용한 기본 셸 스크립트 작성
이제 sleep 명령어의 작동 방식을 이해했으니, 이를 사용하는 셸 스크립트를 작성해 보겠습니다. 셸 스크립트를 사용하면 명령어 시퀀스를 자동화할 수 있으며, 이는 Linux 관리의 핵심 도구입니다.
먼저 프로젝트 디렉토리에 새로운 셸 스크립트 파일을 생성합니다:
cd ~/project
touch delay_script.sh
다음으로 nano 텍스트 편집기를 사용하여 파일을 엽니다:
nano delay_script.sh
파일에 다음 내용을 추가합니다:
#!/bin/zsh
echo "Starting the script..."
echo "First message appears immediately."
sleep 2
echo "Second message appears after 2 seconds."
sleep 3
echo "Third message appears after 3 more seconds."
echo "Script execution complete."
nano에서 파일을 저장하려면 Ctrl+O를 누르고 Enter를 눌러 확인한 다음, Ctrl+X를 눌러 편집기를 종료합니다.
스크립트를 실행하기 전에 실행 권한을 부여해야 합니다:
chmod +x delay_script.sh
이제 스크립트를 실행합니다:
./delay_script.sh
지정된 지연 시간과 함께 메시지가 나타나는 것을 볼 수 있습니다:
Starting the script...
First message appears immediately.
Second message appears after 2 seconds.
Third message appears after 3 more seconds.
Script execution complete.
이 간단한 스크립트는 sleep 명령어를 사용하여 메시지 표시 타이밍을 제어하는 방법을 보여줍니다. 이 기술은 다음과 같은 많은 스크립팅 시나리오에서 유용합니다:
- 사용자 상호작용 시뮬레이션
- 프로세스 완료 대기
- 진행률 표시기 생성
- 작업 속도 제한
스크립트의 각 줄이 수행하는 작업을 살펴보겠습니다:
#!/bin/zsh- 이를 셰뱅(shebang) 라인이라고 하며, 스크립트가 zsh 셸을 사용하여 실행되어야 함을 지정합니다.echo "Starting the script..."- 초기 메시지를 출력합니다.echo "First message appears immediately."- 첫 번째 메시지를 즉시 출력합니다.sleep 2- 스크립트 실행을 2초 동안 일시 중지합니다.echo "Second message appears after 2 seconds."- 2초 지연 후 두 번째 메시지를 출력합니다.sleep 3- 스크립트 실행을 추가로 3초 동안 일시 중지합니다.echo "Third message appears after 3 more seconds."- 3초 지연 후 세 번째 메시지를 출력합니다.echo "Script execution complete."- 최종 메시지를 출력합니다.
다음 단계에서는 변수를 사용하여 sleep 시간을 더 유연하게 만드는 방법을 살펴보겠습니다.
Sleep 명령어와 변수 사용하기
실제 스크립트에서는 하드코딩된 sleep 시간보다 더 많은 유연성이 필요한 경우가 많습니다. sleep 시간에 변수를 사용하면 스크립트를 더 적응력 있고 유지 관리하기 쉽게 만들 수 있습니다. 이 개념을 보여주는 새로운 스크립트를 만들어 보겠습니다.
먼저 새 파일을 생성합니다:
cd ~/project
touch variable_delay.sh
nano로 파일을 엽니다:
nano variable_delay.sh
다음 내용을 추가합니다:
#!/bin/zsh
## Define delay durations as variables
SHORT_DELAY=1
MEDIUM_DELAY=3
LONG_DELAY=5
echo "Starting the script with variable delays..."
echo "This is displayed immediately."
echo "Waiting for a short delay (${SHORT_DELAY} seconds)..."
sleep $SHORT_DELAY
echo "Short delay completed."
echo "Waiting for a medium delay (${MEDIUM_DELAY} seconds)..."
sleep $MEDIUM_DELAY
echo "Medium delay completed."
echo "Waiting for a long delay (${LONG_DELAY} seconds)..."
sleep $LONG_DELAY
echo "Long delay completed."
echo "Script execution complete."
Ctrl+O, Enter, Ctrl+X를 사용하여 nano를 저장하고 종료합니다.
스크립트에 실행 권한을 부여합니다:
chmod +x variable_delay.sh
이제 스크립트를 실행합니다:
./variable_delay.sh
출력 결과는 다음과 비슷할 것입니다:
Starting the script with variable delays...
This is displayed immediately.
Waiting for a short delay (1 seconds)...
Short delay completed.
Waiting for a medium delay (3 seconds)...
Medium delay completed.
Waiting for a long delay (5 seconds)...
Long delay completed.
Script execution complete.
지연 시간에 변수를 사용하는 것이 왜 유익한지 이해해 봅시다:
- 가독성:
SHORT_DELAY와 같은 설명적인 변수 이름을 사용하면 코드가 자체적으로 문서화됩니다. - 유지 관리성: 지연 시간을 변경해야 할 경우, 스크립트 전체를 수정할 필요 없이 한 곳(변수 선언부)만 수정하면 됩니다.
- 일관성: 동일한 지연 시간이 여러 번 사용되는 경우, 변수를 사용하면 모든 인스턴스가 동일한 값을 사용하도록 보장할 수 있습니다.
- 유연성: 변수 값만 수정하여 지연 시간을 쉽게 변경할 수 있습니다.
이러한 변수로 계산을 수행할 수도 있습니다. 이를 보여주기 위해 스크립트를 하나 더 만들어 보겠습니다:
cd ~/project
touch calculated_delay.sh
nano calculated_delay.sh
다음 내용을 추가합니다:
#!/bin/zsh
## Base delay time in seconds
BASE_DELAY=2
echo "Starting script with calculated delays..."
## Using the base delay
echo "Waiting for the base delay (${BASE_DELAY} seconds)..."
sleep $BASE_DELAY
echo "Base delay completed."
## Double the base delay
DOUBLE_DELAY=$((BASE_DELAY * 2))
echo "Waiting for double the base delay (${DOUBLE_DELAY} seconds)..."
sleep $DOUBLE_DELAY
echo "Double delay completed."
## Half the base delay
HALF_DELAY=$(echo "scale=1; $BASE_DELAY / 2" | bc)
echo "Waiting for half the base delay (${HALF_DELAY} seconds)..."
sleep $HALF_DELAY
echo "Half delay completed."
echo "Script execution complete."
저장하고 nano를 종료한 뒤, 스크립트에 실행 권한을 부여합니다:
chmod +x calculated_delay.sh
스크립트를 실행합니다:
./calculated_delay.sh
출력 결과는 다음과 비슷할 것입니다:
Starting script with calculated delays...
Waiting for the base delay (2 seconds)...
Base delay completed.
Waiting for double the base delay (4 seconds)...
Double delay completed.
Waiting for half the base delay (1.0 seconds)...
Half delay completed.
Script execution complete.
이는 단일 기본 값을 기반으로 지연 시간을 동적으로 계산하여 스크립트를 더욱 유연하고 강력하게 만드는 방법을 보여줍니다.
Sleep 명령어의 실용적인 응용
이제 sleep 명령어의 기초와 변수 사용법을 이해했으니, 몇 가지 실용적인 응용 사례를 살펴보겠습니다. 이 예제들은 sleep 명령어가 실제 환경에서 어떻게 사용되는지 보여줍니다.
간단한 카운트다운 타이머 만들기
sleep 명령어의 더 복잡한 사용법을 보여주는 카운트다운 타이머를 만들어 보겠습니다:
cd ~/project
touch countdown.sh
nano countdown.sh
다음 내용을 추가합니다:
#!/bin/zsh
## Function to display a countdown
countdown() {
local seconds=$1
while [ $seconds -gt 0 ]; do
echo -ne "\rTime remaining: $seconds seconds "
sleep 1
((seconds--))
done
echo -e "\rCountdown complete! "
}
## Specify the countdown duration
echo "Starting a 5-second countdown:"
countdown 5
echo "Countdown script execution complete."
저장하고 nano를 종료한 뒤, 스크립트에 실행 권한을 부여합니다:
chmod +x countdown.sh
스크립트를 실행합니다:
./countdown.sh
5초에서 0초까지 카운트다운이 진행되며 시간이 제자리에서 업데이트되는 것을 볼 수 있습니다:
Starting a 5-second countdown:
Time remaining: 5 seconds
Time remaining: 4 seconds
Time remaining: 3 seconds
Time remaining: 2 seconds
Time remaining: 1 seconds
Countdown complete!
Countdown script execution complete.
진행률 표시기가 있는 프로세스 시뮬레이션
간단한 진행률 표시기와 함께 장시간 실행되는 프로세스를 시뮬레이션하는 스크립트를 만들어 보겠습니다:
cd ~/project
touch progress.sh
nano progress.sh
다음 내용을 추가합니다:
#!/bin/zsh
## Function to show a simple progress bar
show_progress() {
local duration=$1
local steps=10
local step_duration=$(echo "scale=2; $duration / $steps" | bc)
echo "Starting process..."
echo -n "Progress: ["
for i in {1..10}; do
sleep $step_duration
echo -n "#"
done
echo "] Done!"
}
## Run a process that takes 5 seconds with a progress indicator
show_progress 5
echo "Process completed successfully."
저장하고 nano를 종료한 뒤, 스크립트에 실행 권한을 부여합니다:
chmod +x progress.sh
스크립트를 실행합니다:
./progress.sh
5초 동안 채워지는 진행률 표시줄을 볼 수 있습니다:
Starting process...
Progress: [##########] Done!
Process completed successfully.
작업 속도 제어
이 예제에서는 sleep 명령어를 사용하여 작업 속도를 제어하는 방법을 보여줍니다. 이는 API 호출 속도를 제한하거나 대규모 데이터 세트를 처리할 때 유용합니다:
cd ~/project
touch rate_limit.sh
nano rate_limit.sh
다음 내용을 추가합니다:
#!/bin/zsh
## Define the rate limit (operations per second)
OPERATIONS_PER_SECOND=2
SLEEP_DURATION=$(echo "scale=3; 1 / $OPERATIONS_PER_SECOND" | bc)
echo "Performing operations at a rate of $OPERATIONS_PER_SECOND per second"
echo "Each operation will be followed by a $SLEEP_DURATION second delay"
## Simulate 6 operations with rate limiting
for i in {1..6}; do
echo "Performing operation $i at $(date +%H:%M:%S.%N | cut -c1-12)"
## Simulate the operation
sleep 0.1
## Rate-limiting delay between operations
if [ $i -lt 6 ]; then
sleep $SLEEP_DURATION
fi
done
echo "All operations completed"
저장하고 nano를 종료한 뒤, 스크립트에 실행 권한을 부여합니다:
chmod +x rate_limit.sh
스크립트를 실행합니다:
./rate_limit.sh
제어된 속도로 작업이 수행되는 것을 볼 수 있습니다:
Performing operations at a rate of 2 per second
Each operation will be followed by a 0.500 second delay
Performing operation 1 at 10:30:45.12
Performing operation 2 at 10:30:45.72
Performing operation 3 at 10:30:46.32
Performing operation 4 at 10:30:46.92
Performing operation 5 at 10:30:47.52
Performing operation 6 at 10:30:48.12
All operations completed
이 예제들은 sleep 명령어가 더 고급 스크립팅 시나리오에서 어떻게 사용될 수 있는지 보여줍니다. 타이밍을 제어하는 능력은 셸 스크립팅에서 많은 실용적인 응용을 가능하게 하는 강력한 도구입니다.
요약
이 실습에서는 Linux에서 sleep 명령어를 사용하여 셸 스크립트에 시간 기반 지연을 추가하는 방법을 배웠습니다. 이는 제어된 타이밍이 필요한 스크립트 작성 및 명령줄 작업에 필수적인 기술입니다.
이 실습에서 다룬 핵심 개념은 다음과 같습니다:
- 다양한 시간 단위(초, 분, 시간)를 사용한
sleep명령어의 기본 사용법 sleep명령어를 포함하는 셸 스크립트 작성- 변수를 사용하여 sleep 시간을 더 유연하고 유지 관리하기 쉽게 만들기
- sleep 시간 변수를 사용한 계산 수행
sleep명령어의 실용적인 응용:- 카운트다운 타이머 생성
- 진행률 표시기 구현
- 작업 속도 제어
이러한 기술은 다음과 같은 많은 Linux 스크립팅 시나리오에서 유용하게 활용될 것입니다:
- 특정 타이밍이 필요한 작업 자동화
- 적절한 일시 중지를 통한 사용자 친화적인 인터페이스 생성
- API 호출 또는 리소스 집약적인 작업에 대한 속도 제한 구현
- 사용자 상호작용 시뮬레이션
- 스크립트 실행 흐름 관리
sleep 명령어를 마스터함으로써, 이제 더 정교하고 사용자 친화적인 스크립트를 만드는 데 도움이 될 중요한 도구를 Linux 스크립팅 툴킷에 갖추게 되었습니다.



