シェルスクリプトでコマンドの実行結果をファイルに保存する方法

目次

スポンサードリンク

Linuxのシェルスクリプトを使うと、コマンド操作を自動化し、操作の結果をファイルに保存することができます。

例えば、psコマンドとwcコマンドを組み合わせて実行するとLinux上で稼働しているプロセスの個数をカウントすることができます。そのコマンドを定期的にcronで実行しプロセス起動数の推移をチェックするなどの利用方法が考えられます。

サンプルコード

#!/bin/sh

function func_main {

today=$(date ""+%Y%m%d"")
file_path=""/tmp/ps.${today}""

# httpd のプロセス数をファイルに記録する
`ps aux | grep http[d] | wc -l > $file_path`

}

func_main

exit 0

変数todayにコマンド実行日を保存しています。 変数file_pathには、コマンドの実行結果を保存するディレクトリ、ファイル名を指定します。今回は「/tmp/ps.20240313」というファイルを作成します。

psコマンドでは、全てのプロセスを標準出力し、grepコマンドで httpd という文字列を含むプロセスに限定します。httpdのdを[]で囲んでいますが、この記述を足すと、grepコマンド自身のプロセスを除外することができます。

grepコマンドの結果を、wcコマンドにパイプで繋ぎ、行数をカウントしています。リダイレクトでカウントした結果をファイルに保存しています。

cronで定期的にシェルスクリプトを実行する crontab -e コマンドで定期実行のスケジュールを登録するファイルを開きましょう。以下はコマンド登録のサンプルです。実行したいタイミングをcronの記法で書いてから実行するコマンドをフルパスで記述します。

# crontab -e

#毎日0時0分に実行
0 0 * * * /root/bin/backup.sh

#月曜日の0時0分に実行(1:月、2:火、3:水、4:木、5:金、6:土、7or0:日)
0 0 * * 1 /root/bin/backup.sh

#毎月1日の0時0分に実行
0 0 1 * * /root/bin/backup.sh

シェルスクリプト内のディレクトリ指定箇所やオプション、crontabで指定する実行タイミングをカスタマイズすれば応用が効きます。

シェルスクリプトの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。

最短3時間で覚えるLinuxシェルスクリプト
こちらは、シェルスクリプトの基本的な書き方、デバッグ方法、if, case, while, forなど基本的な制御構文について書かれています。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。