Практические применения команды 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
может быть использована в более сложных сценариях скриптинга. Возможность контролировать время является мощным инструментом в скриптинге оболочки, который позволяет реализовать множество практических применений.