日付形式の文字列を使用する。
#!/bin/bash # "2023-05-15 12:31:22" を表示 test1=$(date +"%Y-%m-%d %H:%M:%S") echo $test1 # "20230505" を表示 test2=$(date --date "-10 days" +"%Y%m%d") echo $test2
コマンドの成功と失敗を判定する。
#!/bin/bash directoryLocation="/tmp/directory/" mkdir $directoryLocation if [ ! $? -eq 0 ]; then echo "ディレクトリの作成に失敗しました。" fi
ファイルやディレクトリの存在を確認する。
#!/bin/bash directoryLocation="/tmp/directory/" if [ ! -d "$directoryLocation" ]; then echo "ディレクトリは存在しません。" fi fileLocation="${directoryLocation}test.txt" if [ ! -f "$fileLocation" ]; then echo "ファイルは存在しません。" fi anyItemLocation="/tmp/any-item" if [ -e "$anyItemLocation" ]; then echo "何かが存在します。" fi
よくcronで数秒ごとに処理したい場合に使用する。非同期での実行になる。
#!/bin/bash for i in `seq 0 5 59`; do ( sleep $i echo "$i Running" ) & done;
こちらもcronで多用する。実行時のコマンドライン引数も含めたプロセスを確認して、実行中のプロセスがなければ新しいプロセスを起動するような場合に使用する。
※xオプションは制御ttyを持たないプロセスを表示
※aオプションはttyを持つすべてのプロセスを表示
#!/bin/bash sec="123" test=$(ps xa 2>/dev/null | grep $sec 2>/dev/null) if [[ ! $test = *"top -d $sec"* ]]; then top -d $sec fi
起動コマンドに部分一致したプロセスをkillしたい場合に使用する。
※プロセス名が”next-server (v14.2.8)”だった場合の例
※-oオプションは表示項目を指定
#!/bin/bash process=$(ps xa -o pid,command | grep next | grep server); for pid in $process do kill $pid break done
特定のリッスンポートに一致するプロセスをkillしたい場合に使用する。
※-lオプションはリッスン状態のソケットだけを表示
※-nオプションはサービス名ではなくポート番号を表示
※-pオプションはプロセスの情報を表示
#!/bin/bash port=3000 processes=$(ss -lnp | grep $port) processes=(${processes//,/ }) for part in ${processes[@]} do if [[ $part == "pid="* ]]; then pid=$(echo $part | sed "s/pid=//g") kill $pid break fi done