Archive for the ‘shell’ Category


シェルのif文でAND条件を複数指定したい

シェルのif文でAND条件を指定するには以下のように”-a”を付与する。(OR条件なら-o)

シェルの戻り値チェック

シェル実行結果の戻り値は$?で判定する。

今さら知ったCronリダイレクトの誤り

Cronで、標準出力も標準エラー出力も抑制する。よく利用する処理だと思うが、正しいのは以下のどちらか。

sendmailでメール送信するスクリプト

スクリプトという程のものでもないのだが・・・、他の処理と組み合わせてメール送信する時なんかに呼び出して使いたいな、と。

echoコマンドの改行処理など

「echoで改行しないのってどうするんだっけ・・・」「echoで空行いれるのってどうするんだっけ・・・」何回シェルに書いていても忘れてしまう、こういうちょっとした処理。いい加減覚えよう、、、と言うだけ虚しいのでここにメモ。

seqコマンドを利用した繰り返し処理

seqはfor文と相性がよいコマンドで、連続した数値を自動的に生成しリスト化してくれる。繰り返し処理を実行させたい時に便利。

awkの基本形

シェルに組み込むこともよくあるであろうスクリプト言語、awkについてあらためて基本をまとめてみる。BIGINはスクリプトを初期化する働きがある。ENDに伴うアクションはawkが処理を終えた後に一度だけ実行される。

cronでシェルスクリプトが動作しない時

バッチ処理用にシェルスクリプトを作成したら、通常cronに登録する前に手動で動作確認をするだろう。手動だと上手くいったのに、cronだと動作しない、あるいは一部がエラーになる、という状態になったら。

容量の単位を変換するシェル

容量の単位を変換するシェルの例。

バックグラウンドジョブをkillするシェル

バックグラウンドジョブのプロセスをkillするためのシェルをつくってみた。 以下のスクリプトでは、TERMでkillできなかった時のためQUIT,KILLをシグナルとして代入できるようにし、バックグラウンドジョブをカウントして0ならそのまま終了。ジョブがあれば、「kill シグナル PID」が実行される。ジョブのプロセスが終了するのに少し時間がかかる可能性があるため、最後にsleepでシェルを一時停止させる。 killjob.sh 練習用に、ループ状態を作り出すためのシェルloop.shを作成。バックグラウンドで実行し、スクリプトでkillしてみる。ジョブ制御はシェル単位なので、現在のシェルのジョブを終了するにはsourceか.で実行する必要がある。 実行例 $ ./loop.sh & [1] 8085 $ $ jobs [1]+ Running ./loop.sh & ←ジョブ実行中 $ $ . killjob.sh [1]+ Terminated ./loop.sh ←ジョブが終了した $ $ jobs $

ゴミ箱機能シェル

シェルスクリプト練習記録。 Linuxのコマンドライン上でゴミ箱を実現するためのスクリプトは、入門編の参考書に よく登場するみたいだ。2パターンを、それぞれちょっとずつアレンジして作成してみた。 ※garbage.sh,garbage2.sh 両方とも、オプション・引数が入力されなかった場合のメッセージ出力と、 ゴミ箱ディレクトリとなる「.garbage」が存在しなかったらmkdirで作成する、というところまでは一緒。 garbage.sh 以下実行編。 ファイル名を引数として指定してゴミ箱ディレクトリ「.garbage」に移してから、 -eオプションで消去、という流れ。同名のファイルがゴミ箱に移されたら、 日付時刻をファイル名に付与する。 こちらはファイルがゴミ箱に移された時点で同名のファイル有る無しに関らず、 ファイル名に日付時刻が付与される仕様。 「-f ファイル名」と指定すると、確認をせずにゴミ箱へ移される。 この機能はなくてもいいと思うが。。 garbage2.sh 実行例。garbage.shと流れは同じ。

空のディレクトリを削除するシェル

空のディレクトリを削除するシェルスクリプトを作成してみた。

printfコマンドについてメモ

printfコマンドはデータを整形して出力する。echoコマンドより詳細を指定できるので、平たくechoコマンド応用版と捉えておいてもいいだろうか。

evalコマンドのスクリプト例

evalコマンドは、引数で渡された文字列をコマンドとして実行する。その際コマンドライン展開を2度行うということは、覚えておいた方が良さそうだ(これにより変数にセットされたパイプやリダイレクトが実行可能になる)。

exprコマンドについてメモ

exprコマンドは与えられた文学列の中に、与えられた正規表現にマッチする部分があるかどうか」をチェックする。基本的な書式は、「expr 文学列 : 文学列(または正規表現の条件)」となる。

配列のセット

シェルスクリプトにおいて、「配列」は変数に番号をつけたもの、と捉えておくとわかりやすい、、、かもしれない。

ブレース展開とコマンド展開

コマンドラインの展開についてメモ。シェルは入力されたコマンドを実行する前に、受け取った文学列を以下の順番で展開し、処理をする。

returnコマンドについてメモ

returnはシェルスクリプトにおいて関数の終了ステータスを指定するコマンド。returnコマンドを使用しない場合の関数の終了ステータスは、関数内で最後に実行されたコマンドのステータスが採用される。

readコマンドについてメモ

readコマンドは標準入力から文学列を読み込み、変数にセットする。シェルスクリプトでユーザからの回答によって処理を分岐させたい場合に利用される。

historyコマンドについてメモ

historyコマンドは実行したコマンドの履歴を表示する。historyの処理を制御する変数はsetコマンドで確認できる。