シェルスクリプトの覚書

簡単なシェルスクリプトを作るために、不足が無い程度のコマンドをメモとして残してる。説明文も、自分が分かる程度の内容しか載せてない、完全に個人用のメモです。

完成させる予定も無い。
(内容を追加する可能性はあるけど)

 

開始宣言
入れる場合は必ず1行目に入れる。

#!/bin/sh

 

終了宣言
これ以降にプログラムを書いても無視される。
無くても問題無い場合もあるが、最終行に書いておけば安心。

exit 0

 

コマンドで得たデータをxに入れる。
ここまでしないと後のコマンドで入れたデータを扱えない。
コマンドとしては、60日前の日付を『x』に仕込んでる

x=0
date -v-60d +'%Y%m%d' > $x
read x < $x

 

$?の中身を確実に0か1にする。
直前のコマンド実行時、正常終了すれば0、異常終了した時は1か2が$?に入る。シェルスクリプトで処理する場合は、単純に成功か失敗かで判断したいため、0か1かの二択のほうが都合が良い。
コマンドとしては、$?の内容が0ならば$?に0が入れられ、それ以外なら1になる。2になる事はない。

test $? -eq 0

 

数字の比較
条件に合えば0、条件に合わなければ1が$?に入る。

f1 -eq f2 [=なら0
f1 -ne f2 [≠なら0
f1 -gt f2 [>なら0
f1 -lt f2 [<なら0
f1 -ge f2 [≧なら0
f2 -le f2 [≦なら0

 

条件分岐1
yが0ならば、d1ディレクトリ内を削除。それ以外なら何もしない。

if [ $y -eq 0 ]
then
rm -Pr $d1/*
fi

 

条件分岐2
yが0ならばd1ディレクトリ内を削除。それ以外ならばd2ディレクトリ内を削除。

if [ $y -eq 0 ]
then
rm -Pr $d1/*
else
rm -Pr $d2/*
fi

 

条件分離3
$tの中身によって動作を分岐する。
分岐の数は増やせるし、数字である必要もない。

case $t in
"0") echo  0;;
"1") echo  1;;
esac

 

データの抜き出し(コマンド)
複数のデータが表示されるコマンドを実行した時、必要な情報のみ抜き出す。抜き出すデータは『$1』の数字部分で制御する。
コマンドとしては、該当ディレクトリ内のトータルサイズを確認してる。

du -s /home/noichigo/delete | awk '{print $1}'

 

完成したシェルスクリプト、手動では動作しても、crontabでは動作しない場合は、中に書かれているコマンドをフルパスにすると動作する可能性がある。
(フルパスの場所は『which』コマンドで調べられる)

それでもダメな場合は、明確にエラーログを取ってみる。

役に立ちましたか?
  • 役に立った (0)
  • 少しだけ (0)
  • これじゃない! (0)