Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

ここ最近、沢山シェルスクリプトを書くようになりました。 元々あまりシェルスクリプトを書いたこと無かったので、色々と勉強しつつ書いてるのですが、 他のプログラミング言語とはちょっと違って独特なクセというか、発見の度におぉー!ってなることが沢山あって楽しいです。 そんなわけで、最近学んだり参考にした中で特に感動したシェルの上手い書き方をまとめてみます。 きっとまだ知らないこととかもっと上手くやる方法なんかが沢山見つかりそうなので、 もっといいやり方あるよ!って方はコメントください 何もしない : (コロン)コマンド シェルを書いていた時に非常に欲しかったコマンドがこれ!何もしない! : というコマンド(?)を利用すると、**何もせずに終了ステータス0(つまり正常終了)**を返します。 これが様々な事に使える万能コマンドで、これによって面倒なエラー処理を簡潔にできたり、 入力や出力のリダイレクト
すこし記事が長いため、簡単なアウトラインを書いておきます。要点だけ掴みたい場合は、最終項の「まとめ」を読むのがいいかもしれません。 コマンドライン引数の一般的な解析手法 それぞれの特徴 〜 getopt と getopts の違い getopts(メリット・デメリット) getopt(メリット・デメリット) 自前で解析しちゃう(唯一のデメリット) まとめ ============================= コマンドライン引数を処理する一般的な手法として、 getopts getopt shift などで自力で解析 といった具合に、上から順に考えつくかと思います。getopt(3) は UNIX において、コマンドの引数を処理する一般的な C 言語のライブラリ関数です。それを用いて実装されたコマンドが getopt(1) です。Bourne シェル系だと内部関数になりますが、同系統の
月末だけcronで処理をさせたい時。 月末(28日~31日)の24時ちょい前に、翌日の日付が 1 の場合に実行すれば良さげ。 下記のような感じでできる。 59 23 28-31 * * /usr/bin/test `date -d tomorrow +\%d` -eq 1 && /path/to/script
"rsolo"というツールを作りました。一言でいうと "knife-soloのシェルスクリプト版"です。 https://github.com/DQNEO/rsolo bashで書いた1枚スクリプトなのでインストールが超簡単です。 rubyなしで動きます。 なので、 「 knife-soloをインストールするためのGemfileを書くためのbundlerをインストールするためのgemをインストールするためのrubyをインストールするためのrbenvをインストーするための、えーと人生ってなんだっけ」 という苦行からあなたを開放してくれます。 Let's not do yakshaving !! インストールが超簡単! ダウンロードして実行権限をつけてパスを通すだけ! $ curl -sO https://raw.githubusercontent.com/DQNEO/rsolo/master
findコマンドなどでファイルの一覧を取得後、各ファイルに対して処理を行う時、対象ファイルにスペースがあるとそこでパスが区切られ、結果ファイルが存在しない、などのエラーになる。 それを回避するには、スクリプトを実行する際に一時的に区切り文字を変更する。カッコをつけるのは、区切り文字の変更範囲を限定するため。 ( IFS=$'\n' for f in `find ./ -type f -name *.*~`; do rm -f $f done ) 参考 sakatam log: 【bash知恵袋】lsループで、半角スペースが入ったファイル名を正しく処理する
ブログ更新自体がかなりお久しぶりです。 何とか生きてました。身の回りの環境が最近がらりと変わったわけですが、 そのへんはまた近々別のエントリにでもしたいと思います。 今回は久々にシェル芸勉強会に行ってきたのでそのまとめを。 といいつつも、実際の会場の様子は以下の Togetter を見てもらったほうが早いかと。 第10回記念シェル芸勉強会@シェルリアンタワー&第28回場所が未定だったが決まったぞ定例会 - Togetterまとめ 過去のシェル芸勉強会ブログではいちいち自分の Tweet 拾って引用したりと面倒な真似してましたが、 今回からは実際に自分で実行したコマンドたちは gist にまとめてみました。 最終問題についてはお察しください。 収穫とか せっかくなので今回の収穫とか sed 's/./&\n/g' より grep -o . が便利。 会場でたちまち grep ブームが発生して
僕はコマンドラインで使うシェルスクリプトを書くことがけっこうあるんだけど、インターフェイスというか呼び出し方はとても大事だと思ってるので、そこにわりと時間をかけて考えるようにしてる。実装はいつでも変更できるけど呼び出し方を変えた時は利用者にも変更を強いるので、できれば最初から良い設計で作りたいと思っている。 そこで、僕がシェルスクリプトのオプションとか引数とかの仕様を決める上で注意していることをまとめてみた。シェルスクリプトや、その他コマンドラインのツールを作るときに参考にしてほしい。 シェルの種類は bash や zsh を想定してるけど、実装によらない話なのでどんなシェルでも使えると思う。 エラーの時に Usage (使い方ヘルプメッセージ)を表示するのはやめる エラーになった時に Usage (使い方ヘルプメッセージ) を表示するスクリプトがあるけど、やめたほうがいいと思う。例えばこ
橘玲の『「読まなくてもいい本」の読書案内』を読んだので、感想とメモをまとめておく。 この本、タイトルは『「読まなくてもいい本」の読書案内』だが、実際には「読まなくていい本」はほとんど紹介されていない。紹介されているのは、当たり前の話かもしれないが読むべき本だ。他の読書案内本と異なっているのは、”こういう本は読まなくて良い”と、ばっさり切り捨てているところ。読むべきか・読まなくてもよいかの基準は、20世紀後半に爆発的に進歩した科学研究の成果に置いている。著者は、この時期に起きた科学研究の大幅な進歩を”知のビッグバン”、”知のパラダイム転換”と呼び、これ以前に書かれた本は(とりあえず)読む必要がないと言い切る。古いパラダイムで書かれた本は捨てて、新しいパラダイムで書かれた本を読もうという話だ。ちょっと乱暴な分け方ではあるが、1980年代に大学生だった私には案外納得できるものだった。学生時代に最
できればシェルスクリプトなんて書きたくないんだけど,まだまだ書く機会は多い.シェル芸やワンライナーのような凝ったことではなく,他のひとが使いやすいシェルスクリプトを書くために自分が実践していることをまとめておく. ヘルプメッセージ 書いてるシェルスクリプトが使い捨てではなく何度も使うものである場合は,本体を書き始める前に,そのスクリプトの使い方を表示するusage関数を書いてしまう. これを書いておくと,後々チームへ共有がしやすくなる.とりあえずusage見てくださいと言える.また,あらかじめ書くことで,単なるシェルスクリプトであっても自分の中で動作を整理してから書き始めることができる.関数として書くのは,usageを表示してあげるとよい場面がいくつかあり,使い回すことができるため. 以下のように書く. function usage { cat <<EOF $(basename ${0})
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く