はじめに
このプロジェクトでは、指定されたポートでプログラムが実行されているかどうかを確認し、プログラムが実行されている場合はそのプログラムの完全パスを、実行されていない場合は「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 スクリプトを作成します。
テキストエディタを開き、
/home/labex/projectディレクトリにget.shという名前の新しいファイルを作成します。引数としてポート番号が提供されているかどうかを確認するために、次のコードを追加します。
## 引数としてポート番号が提供されているかどうかを確認する 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 OK43000 番ポートではプログラムが実行されていないため、これにより "OK" が出力されるはずです。
スクリプトが期待通りに機能する場合、プロジェクトは完了です。
おめでとうございます!指定されたポートでプログラムが実行されているかどうかを確認し、実行されている場合はそのプログラムの完全パスを、実行されていない場合は "OK" を表示するスクリプトを作成しました。
まとめ
おめでとうございます!このプロジェクトを完了しました。あなたは実験(Lab)をもっと練習することができ、あなたの技術を向上させることができます。



