ここ半年ほど仕事でLinuxのシェルプログラムの一つ、kshをちょこちょこ使う機会があり、
少しずつ勝手がわかってきたので今回それをまとめて投稿してみたいと思います。
#コマンドの実行結果を変数に格納する
RESULT=`echo "result"`
echo ${RESULT} # 「result」と出力される
「`」でコマンドを挟むと変数に入れられるようになります。
「`」はJIS配列互換キーボードでは@&Shift同時押しで出せます。
筆者はDBのselectコマンドなどと組み合わせて使うことが多いです。
#文字列のフォーマットを行い変数に格納する
PRICE=`printf "This is %d yen." 500`
echo ${PRICE} # 「This is 500 yen.」と出力される
C言語のprintfはここから来たのでしょうか?
printf自体は文字を出力するコマンドですが、
前出の結果を変数に入れる書き方を使って
フォーマットした文字列を変数に入れています。
#YYYYMMDD_HHMMSSの文字列を作成(ファイル名などに)
DATE_FOR_FNAME=$(TZ=UTC-9 date '+%Y%m%d_%H%M%S')
echo ${DATE_FOR_FNAME} # 20210926_183020などと出力
キモはdate '+%Y%m%d_%H%M%S'です。
このコマンドで日付を指定フォーマットの形で出力しています。
その前のTZはタイムゾーンの指定です。
#特定プロセスの生き死にの確認
ps -aux | grep [プロセス名]
psはDockerにも同名のコマンドがありますね。
#特定プロセスの消費メモリを一定時間ごとにファイルに出力
top -d [更新間隔(秒)] | grep [プロセス名] >> [出力ファイルパス]
dオプションを付けた場合、Ctrl+Cでコマンドを終わらせるまで動き続けます。
#画面とファイル両方に出力
コマンド | tee [出力ファイルパス]
teeコマンドをパイプ(|)でつなげます。
teeの後に-aオプションをつけると、上書きモードから追記モードになります。
#バックグラウンドで、かつターミナルを終了してもコマンドを終了させずに動かす
nohup コマンド >ログファイル名 &
「>ログファイル名」は省略可能です(その場合、出力はnohup.outというファイルに書き込まれる)。
前半のバックグラウンドでというのを&が担当し、
ターミナルを終了してもコマンドを終了させずに動かすという部分をnohupが担当しています。
通常はコマンドを実行して終わるまでターミナルを起動したままにしておかなくてはならないのですが、
このコマンドを使うことで、実行後は放っておくことができます。
処理に時間がかかるスクリプトなどを呼び出すときに利用しています。