日付形式の文字列を使用する。
#!/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