Введение
В этом проекте вы научитесь создавать скрипт, который может проверить, запущена ли программа на указанном порту, и вывести полный путь к программе или "OK", если программа не запущена.
👀 Предварительный просмотр
## Пример
$ cd /home/labex/project
$ sh get.sh 3000
/usr/lib/code-server/lib/node
$ sh get.sh 43000
OK
🎯 Задачи
В этом проекте вы научитесь:
- Создавать скрипт на Zsh
- Использовать команду
lsofдля проверки, занят ли порт - Использовать команду
psдля получения полного пути к запущенной программе
🏆 Достижения
После завершения этого проекта вы сможете:
- Написать скрипт, который может определить программу, запущенную на указанном порту
- Решать проблемы, связанные с конфликтом портов в вашей среде разработки
- Автоматизировать процесс проверки запущенных программ на конкретных портах
Создайте скрипт get.sh
В этом шаге вы создадите скрипт get.sh, который будет проверять, запущена ли программа на указанном порту.
Откройте текстовый редактор и создайте новый файл с именем
get.shв директории/home/labex/project.Добавьте следующий код, чтобы проверить, был ли передан номер порта в качестве аргумента:
## Проверьте, был ли передан номер порта в качестве аргумента if [ -z "$1" ]; then echo "Please provide a port number." exit 1 fiЭтот код проверяет, был ли скрипт вызван с номером порта в качестве аргумента. Если нет, он выводит сообщение об ошибке и завершает работу скрипта.
Добавьте следующий код, чтобы получить номер порта:
## Получите номер порта port=$1Этот код сохраняет переданный номер порта в переменную
port.Сохраните файл
get.sh.
Проверьте, запущена ли программа на указанном порту
В этом шаге вы добавите код для проверки, запущена ли программа на указанном порту.
Добавьте следующий код в скрипт
get.sh:## Проверьте, занят ли порт process=$(lsof -i :$port -sTCP:LISTEN -Fp | sed 's/^p//')Этот код использует команду
lsofдля проверки, слушает ли какой-то процесс указанный порт. Результат сохраняется в переменнуюprocess.Добавьте следующий код для проверки, запущена ли программа:
## Проверьте, запущена ли программа if [ -z "$process" ]; then echo "OK" else ## Получите полный путь к программе path=$(ps -p $process -o args=) echo "$path" | awk '{print $1}' fiЭтот код проверяет, пуста ли переменная
process(то есть на указанном порту не запущена программа). Если она пуста, скрипт выводит "OK". Если программа запущена, скрипт использует командуpsдля получения полного пути к программе и выводит его.Сохраните файл
get.sh.
Тестируйте скрипт get.sh
В этом шаге вы будете тестировать скрипт get.sh, чтобы убедиться, что он работает как ожидается.
Откройте терминал и перейдите в директорию
/home/labex/project.Запустите скрипт
get.shс номером порта в качестве аргумента:$ sh get.sh 3000 /usr/lib/code-server/lib/nodeЭто должно вывести полный путь к программе, запущенной на порту 3000.
Запустите скрипт
get.shс номером порта, который не используется:$ sh get.sh 43000 OKЭто должно вывести "OK", так как на порту 43000 не запущена программа.
Если скрипт работает как ожидается, вы завершили проект.
Поздравляем! Вы создали скрипт, который может проверить, запущена ли программа на указанном порту, и вывести полный путь к программе или "OK", если программа не запущена.
Резюме
Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.



