このサイトは近い将来、閉鎖予定です。 引っ越し先はこちら: https://scrapbox.io/shellscript-reference/ 20年以上にわたって運営を続けてきた本サイトですが、十分な役割を果たし終えたと考え、このたび幕を閉じることといたしました。 ここでシェルスクリプトを習得された多くの方々の活躍を思うと、運営してきた歳月には、確かな価値があったと確信しております。 これまでご愛読いただき、誠にありがとうございました。
このサイトは近い将来、閉鎖予定です。 引っ越し先はこちら: https://scrapbox.io/shellscript-reference/ 20年以上にわたって運営を続けてきた本サイトですが、十分な役割を果たし終えたと考え、このたび幕を閉じることといたしました。 ここでシェルスクリプトを習得された多くの方々の活躍を思うと、運営してきた歳月には、確かな価値があったと確信しております。 これまでご愛読いただき、誠にありがとうございました。
コマンドのパスを知りたいんじゃなく、コマンドの存在をチェックしたいだけならwhichよりhashを使ったほうが良いかもっていう話。→追記: typeが最強っぽい。 追記: command -vも良い。プログラムの存在チェックorパスを探したいだけなら互換性を考えると一番良いかも。 比較してみる whichよりhashよりtype=command -vが高速→typeまたはcommand -vの勝ち whichは実ファイルという実体があるプログラムです。hashとtypeはbashの組み込みコマンドです。なので当然ですがプログラムの起動コストがない分hashやtypeの方が速いです。 $ time bash -c 'for((i=0;i<10000;i++));do which perl; done >/dev/null' real 0m7.739s user 0m2.928s sys 0m
シェルスクリプト最大の罠:while問題 前回はシェルスクリプトプログラミングのコツの1つとして「アット・ア・グランス性」を紹介した。紹介の中でwhileが引き起こしやすい問題について触れたが、前回の説明だけではよく分からなかった方もいると思う。 今回はこの「while問題」に焦点を当て、シェルスクリプトプログラミングで最もはまりやすい問題を掘り下げて説明する。 whileとパイプの組み合わせで問題発生 次のシェルスクリプトを見てほしい。実行結果を予測してほしいのだが、おそらくほとんどの方が「標準出力にLinuxが出力される」と答えるだろう。
先日紹介したシェルスクリプトで「ビルドスクリプト」を作る時に便利なテクニックへのコメントとして「なぜMakefileでやらないのか」「Makefileの方がいいのではないか」といったものがありました。確かにmakeはメジャーなビルドツールなので、そのような疑問が出てくるのも当然でしょう。 なぜシェルスクリプトなのかということの理由はいくつかあります。 1つは、先のエントリの題材としたスクリプトが元々はWindows用のバッチファイルをLinuxのシェルスクリプトに移植したものだったからという理由です。Windowsのバッチファイルのベタ移植として作成したシェルスクリプトを継続的にメンテナンスしてきた間の改良の結果として、いくつかのテクニックが盛り込まれるようになったため、そのテクニックにスポットを当てて紹介しようというのが、先のエントリの発端でした。 もう1つは、シェルスクリプトは「シェル
「シェルスクリプト中でシンボリックリンクのリンク先を比較したい -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
このシェルスクリプトはいったい何をやっているのでしょう? これは誰が何を実行して、どうして画面に文字が表示されるのでしょうか? ふだんなにげなく使っているコマンドでも、少し深く突っ込んでみると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と呼ばれる大型のオペレーティングシステムを開発していた頃、「インタラクティブで便利なコンピュータサービス」が欲し
Posted on 2007年8月26日 Posted by ちゅう コメントする Posted in Development Tags: Linux Linuxでアプリケーションを自動起動したいときは起動スクリプトかいて chkconfig -add してみたいなことをする。 どんなディストロでも起動スクリプトの書き方は同じなんだろうか(´・ω・`) Redhat, Suse, Debian, CentOSなら行けると思う。例えばPoundはインストールしても起動スクリプトは勝手に出来ないので書く。 普通な場合 # chkconfig [起動レベル] [起動時の優先度] [停止時の優先度] 自分でいれたものだったら、起動レベルは345,45あたりでおk。正直どのレベルに何を置いたらいいのか良く分かってない。起動時の優先度は、低めでいいと思う。逆に停止時は一番最初に止めたいので高めで。 下
Read-Only HTTP Read-Only This URL has Read+Write access
知り合いに気になったことを指摘された. 「シェルスクリプトは実行中にスクリプトを変更すると,変更されたスクリプト通りに動く」というものである. んなことあるかい,スクリプトは実行時にメモリに読み込まれるんでい!と思い込んでいたので,早速調べてみた. 同時作業をするので複数端末を立ち上げるか,screenを使うか,emacsのshellモードを使う. 以下のようなスクリプトを書く. # test.sh echo "start" sleep 5 echo "1" sleep 5 echo "2" sleep 5 echo "3" sleep 5 echo "4" echo "done" 実行する. % sh test.sh startすかさず上記コードの最後の行をコメントアウト # test.sh echo "start" sleep 5 echo "1" sleep 5 echo "2" s
発売当初から保有しつつも全然使っていなかった この本が最近までの一番のお気に入り。 やはり逆引き。 初心者本を何冊も参考にして作成されているだけあって、 ほとんどの機能が網羅されている。 とにかく、一度試してみるというのが一番いい。 そこから、こんなことできないかなーって 発想していって、組み立てていけばいいと思う。 そうそう、CシェルじゃなくてBシェルの話ね。 はじめは ・1行スクリプトをつくる(パイプで並べる) ・おぼえたコマンドをとりあえず試す ・grepで簡単な正規表現にチャレンジ ・awkで区切り文字にチャレンジ ・echoでメッセージを吐き出すif文の作成 このあたりができると、 ・標準入力・出力・エラー出力の使い分けをする ・testを使うようになる ・case文を使うようになる ・引数に$1やら$2やら$**系を使うようになる ・if文にあわせてexprやshiftや$#に
はじめに この記事ではUNIXサーバ管理という側面からのシェルスクリプトプログラミングを取り上げます。またシェルスクリプトを自作するときのポイントも解説します。 UNIXサーバを管理するときは、道具としてのシェルスクリプトが重宝します。常時ログを監視するにしても、入力するコマンドをまとめるにしても、UNIXに用意されているコマンドを有効活用するにはシェルスクリプトが効果的です。 シェルスクリプトは、コマンドを入力する作業の延長線でプログラミングができるという容易な側面を持っていますが、正しく理解しようとすると多くのルールやコマンドを覚えなければならないというやっかいな側面も持っています。 シェルスクリプトを習得する方法はいくつかあります。じっくり時間がとれるならどの学習方法でもよいのですが、入社後にUNIXサーバを管理することになり、緊急に使えるようにならなければならないという逼迫した状況
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く