タグ

shellscriptに関するaki77のブックマーク (75)

  • シェルスクリプトでランダムな数字を得る方法 - World Wide Walker

    シェルスクリプトでランダムな数字を得る方法 Posted by yoosee on Debian at 2006-11-17 23:42 JST1 bash, zsh で $RANDOM を使う故あってシェルスクリプトの中で 0 〜 n のランダムな数字を使う必要があったのだが、いい方法が思い付かず IRC で聞いてみた。「pid を使う」「epoch time を使う」「 dd if=/dev/urandom する」と言う方法も教えてもらったが、そもそも bash や zsh ならば $RANDOM と言う変数が用意されているらしい。RANDOM   このパラメータが参照される度に、 0 から 32767 までのランダムな整数が生成されます。 と言うわけで、例えば 0〜99のランダムな数字を得たいならnum=`expr $RANDOM % 100`でよさそう。 ちなみにその時に topl

  • シェルスクリプトを書く時に気をつけている事など - Qiita

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

    シェルスクリプトを書く時に気をつけている事など - Qiita
  • "set -e"に関するメモ - Shohei Yoshida's Diary

    シェルスクリプトで #!/bin/sh set -e とすると、コマンド実行時に戻り値が 0以外になれば即座に終了 するという便利な機能があります。しかし diffコマンドのように 戻り値 0は差分なし、1は差分あり、それ以外はエラーみたいな 感じで戻り値を利用されると、diffの部分で処理が終了してしまう という問題があります。 #!/bin/sh set -e diff test/old.txt test/new.txt > test.patch echo "finish" のような場合, diff自体は成功しますが、それ以降が実行されず "finish"と表示されないということが起きます。 解決方法 コマンドを ifや whileの条件として書くことで、この問題を回避できます。 #!/bin/sh set -e if diff test/old.txt test/new.txt >

    "set -e"に関するメモ - Shohei Yoshida's Diary
  • シェルスクリプト最大の罠、while問題

    シェルスクリプト最大の罠:while問題 前回はシェルスクリプトプログラミングのコツの1つとして「アット・ア・グランス性」を紹介した。紹介の中でwhileが引き起こしやすい問題について触れたが、前回の説明だけではよく分からなかった方もいると思う。 今回はこの「while問題」に焦点を当て、シェルスクリプトプログラミングで最もはまりやすい問題を掘り下げて説明する。 whileとパイプの組み合わせで問題発生 次のシェルスクリプトを見てほしい。実行結果を予測してほしいのだが、おそらくほとんどの方が「標準出力にLinuxが出力される」と答えるだろう。

    シェルスクリプト最大の罠、while問題
  • rm -rf "/$hoge" のようなスクリプトで痛い目に遭わないために

    cles::blog 平常心是道 blogs: cles::blog NP_cles() « 亀居山 放光院 大願寺の火渡り式 :: キャップのない万年筆というのがあるらしい » 2012/11/04 rm -rf "/$hoge" のようなスクリプトで痛い目に遭わないために  sh 142 0へぇ 例えば下記のようなスクリプトがあったときに DELETEFILE をセットし忘れたりすると目もあてられないような状況になります*1。 DELETEFILE="path/to/file" rm -rf "/$DELETEFILE" こういう場合、通常はこんな感じで if を使って変数が空でないか調べることになると思います。 DELETEFILE="path/to/file" if [ -n "$DELETEFILE" ] ; then rm -rf "/$DELETEFILE" fi それでも

    rm -rf "/$hoge" のようなスクリプトで痛い目に遭わないために
  • シェルスクリプトとMakefileの使い分け - ククログ(2012-10-24)

    先日紹介したシェルスクリプトで「ビルドスクリプト」を作る時に便利なテクニックへのコメントとして「なぜMakefileでやらないのか」「Makefileの方がいいのではないか」といったものがありました。確かにmakeはメジャーなビルドツールなので、そのような疑問が出てくるのも当然でしょう。 なぜシェルスクリプトなのかということの理由はいくつかあります。 1つは、先のエントリの題材としたスクリプトが元々はWindows用のバッチファイルをLinuxのシェルスクリプトに移植したものだったからという理由です。Windowsのバッチファイルのベタ移植として作成したシェルスクリプトを継続的にメンテナンスしてきた間の改良の結果として、いくつかのテクニックが盛り込まれるようになったため、そのテクニックにスポットを当てて紹介しようというのが、先のエントリの発端でした。 もう1つは、シェルスクリプトは「シェル

    シェルスクリプトとMakefileの使い分け - ククログ(2012-10-24)
  • GitHub - jwiegley/git-scripts: A bunch of random scripts I've either written, downloaded or clipped from #git.

  • シェルスクリプトで「ビルドスクリプト」を作る時に便利なテクニック - ククログ(2012-10-11)

    プログラムの種類によっては、そのまま実行できるものと、実行できるようにするために「ビルド」が必要なものとがあります。Cなどのコンパイルが必要な言語で書かれたプログラムは当然ビルドが必要ですし、コンパイルが不要な言語であっても、インストーラパッケージを作るというビルド作業が必要な場合はあります。 ビルド作業の自動化のためのツールとしてmakeなどがありますが、そこまで格的な事をやる必要がない場合は、シェルスクリプトで「ビルドスクリプト」を作るのが手軽でおすすめです。この記事では、そのような場合に役立つシェルスクリプトのテクニックを4つご紹介します。 エラーの気付きやすさとデバッグのしやすさを高める メッセージに色を付ける シェル関数をライブラリにする 一時的に作業ディレクトリの中に入る エラーの気付きやすさとデバッグのしやすさを高める はじめに紹介するテクニックは問題が発生した時に気づきや

    シェルスクリプトで「ビルドスクリプト」を作る時に便利なテクニック - ククログ(2012-10-11)
  • http://blog.suz-lab.com/2012/09/try-catch.html

  • 俺史上最強のiptablesをさらす - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? # !/bin/bash ########################################################### # このスクリプトの特徴 # # 受信・通過については基的に破棄し、ホワイトリストで許可するものを指定する。 # 送信については基的に許可する。ただし、サーバが踏み台になり外部のサーバに迷惑をかける可能性があるので、 # 心配な場合は、送信も受信同様に基破棄・ホワイトリストで許可するように書き換えると良い。 ########################################

    俺史上最強のiptablesをさらす - Qiita
  • shell script を書くときの tips 2つ(初心者向け) - tokuhirom's blog

    shell script を書くときの tips 2つ(初心者向け) shell script は普段さけて通りたいと願ってやまないわけですが、たまには書かないといけないことがあるので、そういうときは覚えておくと便利な tips を2つ。 autodie っぽくする set -e とすると、コマンドの実行に失敗したときにそこで実行がとまるので便利。 #!/bin/sh set -e perl -e 'die' echo SHOULD NOT REACH HERE とすると % ./hoge.sh Died at -e line 1. % echo $? 255 となって、最後までいかずに死にます。 複数のコマンドを順番に実行するときに便利。 なお、以下のような挙動をするんだそうです。 ただし失敗したコマンドが until または while ループの一部である、 if 文の一部である、 &

  • bashによるシェルスクリプトの小技(2) - shibainu55日記

    前回(bashによるシェルスクリプトの小技(1))に引き続き、シェルによって自動的に値が設定される特殊な変数について紹介する。特殊な変数を参照することにより、様々な情報を取得することができる(ただし、これらの変数には自分で任意の値を設定することはできない)。 さて、まずは特殊変数を一覧でまとめてみる。お馴染みのものが多いが、最後の2つ(特に最後のPIPESTATUS)についてはきっと今まで知らなかった人もいるんじゃないだろうか。シェルの中でパイプすると途中のコマンドのリターンコード、拾えないとか思っていませんか?今回のポイントとしては、「1. PIPESTATUS変数について」と「2. 特殊変数 $@と$*の違いについて」の2点を主に説明する。 特殊変数一覧表 変数名 自動的に設定される値 $? 直前に実行されたコマンドの終了ステータスが設定される変数。正常終了の場合は「0」、異常終了の場

    bashによるシェルスクリプトの小技(2) - shibainu55日記
  • シェルスクリプトを多重起動しないようにする - 西尾泰和のはてなダイアリー

    最初はこう書いていた。 lockfile build.lock ... rm -f build.lockだけど、lockfileは失敗した時にデフォルトでは無限にリトライをする。ちょっと出来心で$ for i in {1..100}; do ./foo.sh; done;したから100人の待ち行列が出来てしまった。 やりたかったことは「既に起動していたら続行しないで終了」だったので-r 0でリトライ回数を0にした。 lockfile -r 0 build.lock || exit 1 ... rm -f build.lock

    シェルスクリプトを多重起動しないようにする - 西尾泰和のはてなダイアリー
    aki77
    aki77 2012/03/14
    lockfileコマンド
  • Bash変態文法最速マスター

    注意このドキュメントは、すでにshまたはbashでそれなりにスクリプトを書いている人向けに書かれています。自分が対象読者でないと思ったら、すっぱりと読むのをあきらめてください。時間の無駄です。 このドキュメントではBash version 3.x 系(3.1以降) 4.x 系を対象にしています。2.x 系だと微妙に文法が違うところがあるので注意してください。ちなみに 4.x 系だと、変態なことをしなくても同じことができたり(連想配列が使えるようになったはず)、逆にもっと変態なことができたりします。(2013/09/11 追記) 書きかけで放置している間にメイン環境が 4.x になりました。3.x と 4.x でどこが違うかもう覚えてないし調べるのも面倒なので 4.x 系前提でいきます。 このドキュメントは、主にPOSIXなshにはないBashの機能を使い倒すことを目的としています。ここにあ

  • GitHub - emasaka/sh.inatra: CGI shell script framework looks like sinatra.

    = sh.inatra CGI shell script framework looks like sinatra. == Description sh.inatra is a Web CGI application framework for bash script, made by "pure bash". It's a parody of "sinatra" in Ruby. sh.inatra is just a joke soft (but it works!), so don't use in your production code. == Requirements * bash 3.2 * rm command (I suppose you already have it) * Apache == Install Just copy sh.inatra.sh to some

    GitHub - emasaka/sh.inatra: CGI shell script framework looks like sinatra.
    aki77
    aki77 2012/03/08
    『CGI shell script framework looks like sinatra.』
  • 「シェルスクリプトを書く際に気を付けていること8箇条」の補足を書いた - カイワレの大冒険 Third

    前回のエントリで色々コメント頂いたので、自分の勉強のためにちょいと調べてみた。コメントありがとうございます。 とりあえず、bashオンリーのもの途中から書いてるじゃんという話し。 ひとまず、提示したソースをそのまま使ってみて、やってみた。 declare -r var1=1 echo "var1 = $var1" # var1 = 1 (( var1++ )) # x.sh: line 4: var1: readonly variableこれですな。これのシェバングをshとbashに変えただけ。 $ ./bash_declare.sh var1 = 1 ./bash_declare.sh: line 5: var1: readonly variableよしよし。 $ ./sh_declare.sh var1 = 1 ./sh_declare.sh: line 5: var1: readon

    「シェルスクリプトを書く際に気を付けていること8箇条」の補足を書いた - カイワレの大冒険 Third
  • 一見読みにくい記法もシェルスクリプトの流儀

    前回に引き続き、今回もOS付属のシェルスクリプトを読んでいく。「当にこれでいいのか?」と思うような読みにくい記述も見つかるが、よく読むとシェルスクリプトならではの流儀を学ぶことができる(編集部) とにかく何か作ってみろ シェルスクリプトはお世辞にも読みやすいプログラミング言語とは言えない。ほかの言語にはない特有のルールがあるので、あまり経験がない人がちょっと複雑なシェルスクリプトを読むと嫌になってしまうかもしれない。 その半面、シェルスクリプトにはちょっと書いてすぐに試せるという良い点がある。シェルスクリプトの解説書やソースコードを読みながら「なんだかよく分からない」「マニュアルを読んでもよく分からない」という人には、短くてもいいからとにかく何かシェルスクリプトを書いて、試してみることを強くお勧めする。 これはどんなプログラミング言語にも言えることだが、習得しようと思っても、解説書を読ん

    一見読みにくい記法もシェルスクリプトの流儀
  • シェルスクリプトでシンボリックリンク先が同一かチェックする方法 - hnwの日記

    「シェルスクリプト中でシンボリックリンクのリンク先を比較したい -OKWave」というページを見つけたんですが、もっとスマートに出来る気がしたので紹介します。どうやら-ef演算子が利用できるようです。(確証は無いのですが、私の手近では反例を見つけられませんでした) $ touch a b; ln -s a c ; ln -s c d $ ls -lai [abcd] 188974 -rw-r--r-- 1 hanawa hanawa 0 2009-01-05 03:52 a 188976 -rw-r--r-- 1 hanawa hanawa 0 2009-01-05 03:52 b 188977 lrwxrwxrwx 1 hanawa hanawa 1 2009-01-05 03:52 c -> a 188978 lrwxrwxrwx 1 hanawa hanawa 1 2009-01-0

    シェルスクリプトでシンボリックリンク先が同一かチェックする方法 - hnwの日記
  • OSに付属するシェルスクリプトを読んで技術を盗む

    今回から、OS付属のシェルスクリプトを読んでいく。多くの人が使っているスクリプトを読むことで、シェルスクリプトならではの書き方、テクニックを身に付けることができるはずだ(編集部) 他人の技術を盗まなければ進歩はない 外国語をマスターするにも、楽器の演奏を覚えるにも、上達するにはただ練習するだけではダメだ。素晴らしいお手を見つけて、よく観察し、何度もまねることが必要だ。お手から技術を「盗む」ことが大切だということだ。 プログラミングでも同じことが言えると思う。文法を覚えて、ただひたすらプログラムを書くだけではなかなか上手にならない。スキルのある人のコードを見て、技術を盗もう。開発チームのメンバーそれぞれが書いたコードを持ち寄って、お互いに批評し合う「コードレビュー」に参加している、あるいはリーダーとして主催しているという人は多いと思う。このコードレビューも、人から技術を盗む良い機会と言え

    OSに付属するシェルスクリプトを読んで技術を盗む
  • 端末のシェル(bash,dash,zsh,csh系)におけるwaitコマンドについて - 試験運用中なLinux備忘録・旧記事

    端末のシェル(bashなど)にはwaitというコマンドがある。 機能 用途 機能waitは現在操作しているシェルにおけるバックグラウンドのジョブが終了するまで待機するコマンドで、シェルの内部コマンドとなっている(シェルの系統によっては挙動が異なる)。 bash,dash,zshでは待機中にCtrl+Cを押すと待機をキャンセルしてプロンプトに戻ることができるが、csh系ではできない? 下はxtermを用いた作業例だが、dashではバックグラウンドで実行した際のジョブ番号やプロセスIDの表示はされない。 (バックグラウンドでxtermを起動することにする) $ xterm & [1] [プロセスIDが表示される] (xtermを終了するまで待機) $ wait (待機状態となり、xtermを終了するとwaitコマンドは終了してプロンプトが出る)ジョブが複数存在する場合、全てのジョブの終了を待機

    端末のシェル(bash,dash,zsh,csh系)におけるwaitコマンドについて - 試験運用中なLinux備忘録・旧記事