タグ

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

  • UNIX & Linux コマンド・シェルスクリプト リファレンス

    このサイトは近い将来、閉鎖予定です。 引っ越し先はこちら: https://scrapbox.io/shellscript-reference/ 20年以上にわたって運営を続けてきたサイトですが、十分な役割を果たし終えたと考え、このたび幕を閉じることといたしました。 ここでシェルスクリプトを習得された多くの方々の活躍を思うと、運営してきた歳月には、確かな価値があったと確信しております。 これまでご愛読いただき、誠にありがとうございました。 目次 当サイトについて bash シェルスクリプト入門 -シェルスクリプトのいろは- コマンド Tips シェルスクリプト Tips 変数を使用する 配列を使用する 入力と出力 if 文と test コマンド for 文の使用方法 while 文の使用方法 case 文の使用方法 関数の使用方法 引数を処理する 終了ステータス シグナルと trap コ

    UNIX & Linux コマンド・シェルスクリプト リファレンス
  • Advent Calendar 10日目 /etc/rc.d配下とかのリーディング勉強会 - do_aki's log

    /etc/rc.d配下とかのリーディング勉強会 : ATND に参加してきました。 発表した資料はこれ。 /etc/rc.d/init.d/functions Functions View more presentations from do_aki 発案者の[twitter:@riywo] さんは都合が付かず不参加でしたが、 [twitter:@oranie] さんが、/etc/rc.d 配下の概要を、 [twitter:@myfinder] さんは、/etc/rc.d 配下を呼び出す前の /etc/inittab から説明を、 [twitter:@tagomoris] さんは、servoce コマンドと 起動スクリプト直実行の違いを、 [twitter:@n0ts] さんは、 network 関連の起動スクリプトを、 [twitter:@famao] さんは、 /etc/rd.d/in

    Advent Calendar 10日目 /etc/rc.d配下とかのリーディング勉強会 - do_aki's log
  • rbenvの切り替えの仕組み…と、他言語での実験 - すぎゃーんメモ

    rbenvを使ってみる - すぎゃーんメモの続き。 現時点でのrbenvのバージョンは0.2.1。 rbenvを使っていると.rbenv-versionファイルの有無でrubyコマンド打ったときに実行されるrubyが違うものになる、というのがちょっと新鮮で、これはどういう仕組みで動いているのだろう?と思って少し調べてみた。 上記記事のようにrbenvの設定をした環境では、 $ which ruby /Users/sugyan/.rbenv/shims/rubyとなり、${RBENV_ROOT}/shims以下のrubyを指すことになる。ここへのPATHは$HOME/.rbenv/libexec/rbenv-initに echo 'export PATH="'${RBENV_ROOT}'/shims:${PATH}"' と書かれているので、eval "$(rbenv init -)"してあれ

    rbenvの切り替えの仕組み…と、他言語での実験 - すぎゃーんメモ
  • シェルスクリプトでシグナルハンドラを書く - mikedaの日記

    シェルスクリプトでシグナルをトラップするにはtrapを使います。 最初の引数が実行コマンドで、その後ろにトラップするシグナルを並べます。 #!/bin/sh trap 'echo exit...' EXIT trap 'echo trap INT or TERM' INT TERM echo start sleep 5 echo end 出力 start end exit... start (^C押す) trap INT or TERM end exit... EXITはプロセス終了時に投げられる番号0のシグナルです。 シグナル指定は名前でも番号でもよくて、他のシグナルはtrap -lやkill -lで見れます。 $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIG

    シェルスクリプトでシグナルハンドラを書く - mikedaの日記
  • シェルスクリプトはエレガントでなければならない

    /bin/shの実体としてはash(dash)、bash、kshの採用例が多い。どのシェルもBourne shellの機能に加えて、拡張機能を提供する。 FreeBSDなどの*BSD系のOSは、ashを/bin/shとして使っている。ashはPOSIX.1(POSIX:2008)にいくらかのBSD拡張機能を取り込んだシェルだ。メモリをあまり消費せず、高速に動作し、ほかのライブラリに依存することが少ない。従って、rootやレスキューシステムのインタラクティブシェル、システムのシェルスクリプトといった場面で採用されている。 Mac OS Xはbashを/bin/shに採用している。FedoraやopenSUSEなどのLinuxディストリビューションもbashを/bin/shに採用している。LinuxディストリビューションでもUbuntuやDebian、Linux Mintなどは、高速に動作する

    シェルスクリプトはエレガントでなければならない
  • Mitzyuki's Blog :: シェルスクリプトで疑似乱数を取得する

    シェルスクリプトで疑似乱数を取得する gnu bash には ${RANDOM} というシェル変数が用意されていて、 アクセスするたびに疑似乱数(風)の値が取得できる様だ。 しかし posix 準拠の機能ではなく bash 独自の機能なので拡張性がない。 そこで汎用的な疑似乱数取得の方法として awk (1) を利用した方法を使ってみる。 awk (1) には rand() という関数が組込まれているので 乱数生成ができる。 その際に利用される種(seed)は srand() という関数で初期化できるので、 これらを利用する事でそこそこの精度の疑似乱数は取得できる。 たとえば 0 〜 m までの疑似乱数は 取得した値から m の剰余を取ることで取得できる。 ただし awk (1) の rand() は仕様として 0 〜 1 までの桁数不定の少数を返すので、 乱数として利用する場合には整数に

  • 「覚えて便利 いますぐ使える!シェルスクリプトシンプルレシピ54」のすすめ - わからん

    OSC 2011 Tokyo/Fall で「覚えて便利 いますぐ使える!シェルスクリプトシンプルレシピ54」というシェルスクリプトのを見つけました。このブログの過去記事と絡めて、2つレシピを取り上げ、どういった内容かを紹介します。サンプルコードは単純なものに変更しました。 レシピ5-5 1行ごとに処理をする―その2〜4― comm の結果を検索キーにして grep するには - わからん 以前、comm -3 の結果を検索キーにして grep する方法として、以下のようなコードを書きました。 comm -3 a.txt b.txt | while read word; do echo "--" grep $word c.txt done この while read line 構文は、「レシピ5-4 1行ごとに処理をする その1」でも紹介されているのですが、問題点として while の行ル

  • シェルスクリプトの引数をそのまま別のコマンドにわたす command ${@+"$@"} - わからん

    シェルスクリプトの引数をそのまま別のコマンドにわたす。これは引数の多いコマンドに対し、いくつかの引数を固定にしたラッパーをつくるときなんかによく使います。今回の個人的なシェルスクリプトブームにのっかって、Bruce Blinn さんの名著「入門UNIXシェルプログラミング」にあった細かい指摘の仕組みも調べておきました。 以下の書き方では、引数がなかった場合、command に空文字が渡されてしまいます。細かいこと言っちゃってごめんね。 command "$@" だけど、次のようにすれば、空文字が渡りませんよ。 command ${@+"$@"} man を読むと、対象が null か unset されているなら何もパラメータ展開しない、つまり何もしないという定義をうまく適用したものだ、ということがわかりました。 ${parameter:+word} Use Alternate Value.

  • シェルスクリプトで日付を列挙する。 - ペンギンと愉快な機械の日々

    Unix/Linux, programming仕事で引きついた運用環境に、コピペで一日ずつ増やして対応するバッチがあったので、簡単なのを書いた。GNU dateコマンドおよびbashであることが前提。 #!/bin/bash STARTDATE=20111226 ENDDATE=20120105 DELTA=$((($(date -d "$ENDDATE" +%s)-$(date -d "$STARTDATE" +%s))/86400)) for i in $(seq 0 $DELTA) do echo $(date -d "$STARTDATE $i day" +%Y%m%d) done exit 0 実行結果 $ ./datelist.sh 20111226 20111227 20111228 20111229 20111230 20111231 20120101 20120102 2

  • シグナルと trap コマンド | UNIX & Linux コマンド・シェルスクリプト リファレンス

    シグナルと trap コマンド シグナル シグナルとは? シグナルとは、実行中のプロセスに対して、さまざまなイベントを通知するために送出されるものである。 よく使用される、プロセスを終了するためのシグナルである SIGTERM や SIGKILL などのほかにも、数十種類のシグナルが存在する。 使用可能なシグナルの一覧は、コマンドラインから kill -l を実行することで参照可能である。 $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19)

    シグナルと trap コマンド | UNIX & Linux コマンド・シェルスクリプト リファレンス
  • Shell: script (Japanese)

    ■ シェルスクリプト ちょっとだけシェルスクリプト。 csh 系ではなく sh 系で bash や zsh や ksh や POSIX shell などの話です。 * 使いましょ ? も便利 for 文 case 文 if 文 引数を扱う $* と $@ 標準入力を一行ずつ find と xargs 標準エラー出力 {} サンプル シンプルバックアップ YYYYMMDD ディレクトリを YYYY/MM/DD へ このページでは、コマンドラインから入力を「強調文字」にしています。 シェルの話題なので、入力がはっきりわかるようにするためです。 プロンプトは sh ということで「$ 」を使用しています。 ■ * 使いましょ シェルを使うときにファイル名の展開として ls コマンドを使うと思いますが、echo * という使い方もしっておいてください。 これはシェルのとっても基的なことなんですが、

  • シェルスクリプトの多重起動を防ぎたい! - uunfo’s blog

    これでいいかな? すでに他のプロセスで起動していたら何もせずに終了する。 if [ $$ != `pgrep -fo $0` ]; then exit 1 fi $$ 自分のプロセスID pgrep プロセスをgrepしてプロセスIDのリスト返す -f プロセス名だけではなくて引数などコマンド全体を検索対象にする(ps -fの値ということ) -o マッチした中で一番古いプロセスIDだけを返す $0 起動時の自分の名前 呼び出し毎に引数が違う場合は$0の代わりにbasename $0"$0 $@"を使えばいいかな。 参考 http://www.sssg.org/blogs/naoya/archives/672 以下はロックファイルで制御し、異常終了時はtrapで対処するというもの。 MSN Japan - ニュース, 天気, メール (Outlook, Hotmail), Bing検索, S

    シェルスクリプトの多重起動を防ぎたい! - uunfo’s blog
  • そういえばsshfsが便利な件 - (ひ)メモ

    以前はリモートのファイル編集するのにEmacsでTRAMP使ってたんですが、sshfsの方がシェルでcdとかlsできるし、Emacsでoccurとかもできるしいいよねってんで最近はsshfs使ってます。 で、sshfsしたいホストが多いといろいろめんどくなるんで、↓みたいなヘルパスクリプト書いて使ってましたよって話です。 マウントポイントをまとめておくディレクトリ(~/r/とか)の下に、予めsshfsするリモートホストの名前のディレクトリを作っておきます。sshするときユーザー名が必要なホストはUSERNAME@HOSTNAMEでmkdirしときます。 $ cd ~/r/ $ mkdir host1 $ mkdir foo@host2 あとは末尾のヘルパスクリプトで、sshfsでマウントしたり、sshfsなマウントポイントの一覧を見たり、アンマウントしたりできます。 $ ./m host1

    そういえばsshfsが便利な件 - (ひ)メモ
    aki77
    aki77 2011/07/13
    ヘルパスクリプト
  • 標準入出力すりかえのテクニック

    このシェルスクリプトはいったい何をやっているのでしょう? これは誰が何を実行して、どうして画面に文字が表示されるのでしょうか? ふだんなにげなく使っているコマンドでも、少し深く突っ込んでみるとLinux(UNIX)の仕組みや特徴が見えてきます。 実はechoは、「bashの内部コマンド」の1つであり、bash自身によって実行されています。意外に思われた方も多いかもしれません。なぜなら「echo」は外部コマンドとしても存在する(通常は/bin/echo)からです。でも、普通に設定されたLinuxで実行されるechoはbashの内部コマンドのほうです。試しにやってみましょう。 上は“--version”という文字列をそのまま表示するだけですが、下は“--version”を「バージョンを表示しろ」というオプションと理解して、/bin/echoのバージョンを表示してます。 このように内部コマンドの

    標準入出力すりかえのテクニック
  • コマンドを組み合わせる「のり」としてのシェルスクリプト

    UNIXの発展で大きく寄与をしたのは、シェルスクリプトである。シェルスクリプトによって既存のコマンドとユーザプログラムを組み合わせ、新たなプログラムを作成する過程は、ソフトウェアの「のり」と呼ぶにふさわしい。 シェルスクリプトでベースになった技術は、デバイスとファイルを区別しないファイルシステム、入出力のリダイレクト、forkとpipeによるストリームのパイプライン処理である。 ここでは、シェルスクリプトの「のり」としての役割に焦点を当てて解説する。 Last modified: Wed Mar 30 22:21:21 JST 2005 1 そのとき歴史がかわった UNIXの産みの親であるKen ThompsonとDennis RitchieがAT&Tのベル研究所でMulticsと呼ばれる大型のオペレーティングシステムを開発していた頃、「インタラクティブで便利なコンピュータサービス」が欲し

  • ユーザ配布用のbashシェルを作成するための 17 のコマンド - 主に言語とシステム開発に関して

    バッチのまとめTOPへ ユーザ配布用の,linux上のシェルスクリプトを作成する。 そのために必要なコマンドの入門知識。 開発者やアプリが実行するのではなく,配布先の一般のlinuxユーザが実行するシェルである,という点がポイント。 そうすると,求められるのは 利用者の打つコマンドが少ないこと 不測の事態(ディレクトリが無いとか)を自動的に判断して,処理を正常に進めること 扱うコマンド類は,下記の17個。 (1)前準備 (1−1)cp, tar (1−2)shebang (1−3)変数宣言,date (1−4)test,exit (1−5)test, mkdir,rm (1−6)/etc/init.d/-- stop (1−7)sh (2)メイン処理 (2−1)for, find, grep (2−2)head, tail (2−3)sed (2−4)patch, diff (2−5)外部

    ユーザ配布用のbashシェルを作成するための 17 のコマンド - 主に言語とシステム開発に関して
  • "set -e": 実行コマンドが0以外の終了コードの場合、シェルスクリプトを終了する - 元RX-7乗りの適当な日々

    「シェルスクリプトの実行過程でエラーが発生した場合に処理を止めたい」・・・それをすごくシンプル(簡単)に実現したい場合に使えます。 例えば、以下のようなシェルスクリプトを書いた場合、、、 #!/bin/sh mkdir /tmp/hoge/fuga touch /tmp/hoge/fuga/test.txt 実行結果は以下のようになります。 $ ./test.sh mkdir: ディレクトリ `/tmp/hoge/fuga' を作成できません: そのようなファイルやディレクトリはありません touch: `/tmp/hoge/fuga/test.txt'にtouchできませんでした: そのようなファイルやディレクトリはありません/tmp/hogeディレクトリが存在しないので、/tmp/hoge/fugaのmkdirでこけます。まぁ普通ですよね。。。 が、何も考えずに書くと、↑のように、その

    "set -e": 実行コマンドが0以外の終了コードの場合、シェルスクリプトを終了する - 元RX-7乗りの適当な日々
  • PDFファイルをページ毎にJPEG化するスクリプト

    ここのところ、ずっと更新をサボリ気味で申し訳ありません。更に、今回は純粋なMacネタでもありません...。ただ、便利なスクリプトを知ったので、自分用の備忘録として残して置こうと思います。 PDFはとても便利なフォーマットではあるのですが、ちょっと使いたいな〜というケースでは重過ぎると感じる事もあります。そんな時は、PDFファイルを、画像ファイルに変換してしまった方が便利かもしれません。 Macで、PDFから画像ファイルに変換する一番簡単な方法は、プレビュー.appを利用する事だと思います。具体的には、メニューの「ファイル」→「別名で保存...」をクリックし、表示されたダイアログの「フォーマット」を「JPEG」や「PNG」など画像形式を選択して保存すればOKです。 ↑プレビュー.appでもPDFから画像ファイルに変換する事ができる と、プレビュー.appはとても便利なのですが、表示しているペ

    PDFファイルをページ毎にJPEG化するスクリプト
  • サーバ間の設定ファイル差異を比較するスクリプト - sanonosa システム管理コラム集

    サーバ台数が増えてくると、例えば同じ種類のサーバをスケールアウトしているとき、1台だけ設定ミスがあったとしてもなかなか気付きづらくなります。サービスの安定稼動のためにはこういった些細なミスは完全に潰しておく必要があります。そこで今回はサーバ間の設定ファイル差異を比較するスクリプトを作りましたのでご紹介してみます。 【前準備】 まずはこちらでも記したような方法で、パスワードなしで各サーバにSSH接続できるようにしておいてください。 【サーバ間の設定ファイル差異を比較するスクリプト】 下記スクリプトをどこかに保存してください。ファイル名は便宜上「filediff.sh」とでもしておきます。そして、今回比較するファイル名を羅列し、かつサーバ番号(下記の例だと10.0.0.1の設定ファイルを10.0.0.2~10の設定ファイルと比較しています)を書き換えてください。 $ cat > filedif

    サーバ間の設定ファイル差異を比較するスクリプト - sanonosa システム管理コラム集
  • 起動スクリプトの書き方 | 変なヤバいもんログ

    Posted on 2007年8月26日 Posted by ちゅう コメントする Posted in Development Tags: Linux Linuxでアプリケーションを自動起動したいときは起動スクリプトかいて chkconfig -add してみたいなことをする。 どんなディストロでも起動スクリプトの書き方は同じなんだろうか(´・ω・`) Redhat, Suse, Debian, CentOSなら行けると思う。例えばPoundはインストールしても起動スクリプトは勝手に出来ないので書く。 普通な場合 # chkconfig [起動レベル] [起動時の優先度] [停止時の優先度] 自分でいれたものだったら、起動レベルは345,45あたりでおk。正直どのレベルに何を置いたらいいのか良く分かってない。起動時の優先度は、低めでいいと思う。逆に停止時は一番最初に止めたいので高めで。 下

    起動スクリプトの書き方 | 変なヤバいもんログ