タグ

Linuxとbashに関するiwwのブックマーク (59)

  • 変数を使用する | UNIX & Linux コマンド・シェルスクリプト リファレンス

    → 他のプログラミング言語と同様に = を使用する。 シェルスクリプトでも C言語などと同様に = を使用することで変数に値を設定することができる。ただし、C言語とは違い = の前後にスペースがあってはいけない。 また、変数名の大文字と小文字は区別されるため変数 VAR と変数 var は別物として扱われる。さらにシェル変数に「型」は存在しないので、文字列や数値を区別なく設定できる。 ポイントをまとめると以下のとおりとなる。 = を使う 値の設定時は変数名の先頭に $ を付けない ($ は参照時のみ) = の前後にスペースを入れない (前後にスペースがあるとエラー) 型は存在しない (declare コマンドや typeset コマンドで似たようなことができるが推奨はしない) 変数名の大文字・小文字は区別される (VAR と var は別物) 特に「2」は初心者が犯しがちなミスなので注意す

    変数を使用する | UNIX & Linux コマンド・シェルスクリプト リファレンス
  • シェルスクリプトを書くときに気をつけていること(その1) - mikedaの日記

    初級者向けに『自分がシェルスクリプト書くときに気をつけていること』をまとめてみました。 @masudaKの『シェルスクリプトを書く際に気を付けていること8箇条』の乗っかりエントリです。 内容は重複しないように書いてますので合わせて読んでください! 基的にLinuxの/bin/sh、/bin/bashを想定しています。 テキスト処理は標準入力から受け取って標準出力に出す テキストを扱う小さなツールを作りましょう。 引数はオプション情報を渡すのに使います。 そうすればgrep、sort、uniqなどの便利なコマンドとパイプで連携できます。 grep ERROR /tmp/test.log | my_cmd1.sh 192.168.1.1 | sort 全てを実行する1つのスクリプトを作るのはたいへんだし、応用が効かないです。 人間に伝えたいメッセージは標準エラー出力に出す パイプでつないだ時

    シェルスクリプトを書くときに気をつけていること(その1) - mikedaの日記
  • コマンドラインでtabを入力する方法 - 色々メモにっき

    Ctr+v tab 偶然知った。便利ー。 Emacsでタブ入力はC+q tabでOK

    コマンドラインでtabを入力する方法 - 色々メモにっき
    iww
    iww 2012/03/29
    CTRL+V, Tab
  • ゆにっくさー(UNIXer)

    execに助けられる あるとき、遠く離れた場所に設置してあるSolarisサーバへtelnetでログインした。 スーパーユーザはtelnetでのログインを禁止していたので、一般ユーザにて。 ユーザ名、パスワードを入力した後、bashが起動するようになっているが、 ログイン後に次のようなメッセージが表示された。 Last login: Wed Dec 15 17:07:43 from 172.10.5.1 bash: fork: 資源が一時的に使用できません。 bash-2.05$ 資源不足?メモリもディスクもたっぷりあるはずなので、それはおかしいと思った。 とりあえず入力プロンプトは出ているので、何が起こっているのか調べようと思った。 bash-2.05$ top bash: fork: 資源が一時的に使用できません。 bash-2.05$ ps -efl bash: fork: 資源が一

  • bash上で「echo "!!" > foo」を実行すると? - 今日の腕試し!:ITpro

    Linux/UNIX上のbashシェルで、何らかのコマンドを実行した後に「echo "!!" > foo」というコマンドを実行するとどうなりますか? ●解答を送信いただくと,すぐに正解と詳しい解説をご覧いただけます。

    iww
    iww 2012/01/18
    "!!"も展開されるのか。知らなかった。 echo "hoge!" とかが余裕でエラーになる。
  • Bash Prompt HOWTO: ANSI エスケープシーケンス: 色とカーソル操作

    次のページ 前のページ 目次へ 5. ANSI エスケープシーケンス: 色とカーソル操作 5.1 色 すでに述べたように表示されないエスケープシーケンスは、\[\033[ と \] で囲んでやる必要があります。色のエスケープシーケンスの場合は 後ろに m\] をつけてやる必要があります。 もしこれから説明するプロンプトを試してみて、指定した色がうまく表示され ないなら、 /.Xdefaults ファイル(あるいはそれと同等のファイル)に "XTerm*Foreground: BlanchedAlmond" のような行がないか調べてください。 この前に!マークをつけることによって、コメントアウトすることができます。 これは、あなたがどのような端末エミュレータを使っているかにも依存します。 あなたの端末の色が上書きされる可能性のもっとも高いのがこのファイルです。 プロンプトにブルーのテキストを

  • bashでCtrl-rでコマンド履歴を後方検索 - POCH-7003 BEATout!

    コンソールを使っていると頻繁にCtrl-pやCtrl-nを利用する。前に打ったコマンドを何度も打ちたくないからだ。出来る限りタイプを少なくしたいからね。 そんな中で重宝するのが、後方検索。前にあのコマンドを打ったけど微かにしか覚えてない・・・あの長いパスをもう一回打ちたくない・・・Ctrl-pで戻るのがしんどい・・・などなど。 そんな時はCtrl-rで検索出来る。例えばsudoって打った時を検索してみようと言う場合は、Ctrl-rの後にsudoと打ってみる。そうするとCtrl-rを押すたびにsudoを検索してくれる。 そしてそして、これも良くあるのだが、行き過ぎた場合がやっかい。一旦escやCtrl-gで抜けた後に再度、後方検索をするのは面倒。実に面倒。 そんな場合は、 #割当状況を確認 $ stty -a #スクリーンロックを未定義にする $ stty stop undef $ stty

    bashでCtrl-rでコマンド履歴を後方検索 - POCH-7003 BEATout!
  • 5.11 ワイルドカードとメタキャラクタ

    ``ワイルドカード''や ``メタキャラクタ''とは任意の文字列を指定するための特殊な文字のことです. ワイルドカードやメタキャラクタを利用することによって,複数のファイルを効率的に操作できます. 次にそれぞれの使用例を示します. 5.11.1 0文字以上の任意の文字列を表すワイルドカード `*' `*' (アスタリスク) は0文字以上の任意の文字列を表すワイルドカードです. 例えば,`*.tex'はファイル名が `.tex'で終るすべてのファイルを意味します. シェルは`*'を0文字の文字列としても解釈します. そのため,`abc*'と入力すると,`abc'という名前のファイルも操作の対象に含まれます. ただし,先頭に`*'を指定した場合でも,ファイル名が`.'ではじまるファイルは含まれません. % ls -a <ENTER> ./ .mathmatics economics.tex m

    iww
    iww 2010/08/07
    文字列候補を指定するメタキャラクタ `{ }'
  • 【レビュー】bashの配列を使う方法 | エンタープライズ | マイコミジャーナル

    Guides, HowTos and Tips for Technology Geeks - The Geek Stuff 高機能シェルのひとつにbashがある。shの機能を拡張したsh系に分類されるシェルで、インタラクティブシェルとしてもシェルスクリプトとしても利用される。Linux系のディストリビューションではデフォルトでインストールされ、デフォルトのシェルに設定されていることが多い。その場合、システムの/bin/shの実態がbashになっていることもあり、/bin/shスクリプトを書いているつもりでいつの間にかbashの拡張機能を使っていることもある。 The Ultimate Bash Array Tutorial with 15 Examples - The Geek Stuffにおいてbash拡張機能のひとつである配列の機能が紹介されている。15のサンプルにわけて機能を紹介する

  • UNIX : bash

    説明 引数で指定された2つのファイルのどちらが新しいかどうかを調べるにはifを使います。条件判断には[ $1 -nt $2 ]とすることでどちらのファイルが新しいかどうか調べることができます。$1の方が新しい場合にはthen~fiまでの間にメッセージを表示する処理を書きます。

    iww
    iww 2009/12/09
  • bash 超プログラム術

    bash の解説なんて、ネット上には結構あったりするのだが、これをわざわざ公開しようというのは、次の理由による。 某ソフトハウスでのUNIX講座用に書いてしまったから。 ネット上にある bash 解説だと、表面的な構文解説程度であり、きっちりスクリプト言語として使い倒すレベルの解説はあまりない。まあ、プログラミング言語として凝ったサンプルもやってみようじゃないの、というノリで割とディープに解説する。 アクセスを増やすための人気取り(苦笑)。 まあ、そんな不純な目的による bash 解説である。とはいえ、日常的に使い慣れている bash であっても、「え、こんな使い方があったの!?」という発見もあることであろう。苦笑しながらでも読んでくれたまえ。だから、初歩的なリダイレクションなんかは解説しないからそのつもりで。 ちなみに参考書としたのはオライリー・ジャパン刊「入門 bash 第2版」である

  • Linux Certif - Man flock(1)

    iww
    iww 2009/05/13
    flockについて
  • Stray Penguin - Linux Memo (BASH)

    exp で 1文字を対象にしたいのであれば ?([a-f]) のようにクラスを併用することも可能。必ずしも `|' を使わなければならないわけではない。また、正規表現は ?(bash@(ref)) のように入れ子にすることもできる。 Bashで正規表現(2) ([[ =~ ]]オペレータ) 二重の `[[' を使い比較演算子に `=~' を使うと、右辺は拡張正規表現とみなされる。前項とは異なりこちらは物の正規表現だ。面白いのは、マッチ部分が BASH_REMATCH という配列にアサインされるという点。 VAR=$(LANG=C date +'%c') # VAR='Wed Dec 22 22:51:41 2010' DAYOFWEEK=Wed PATTERN='^'$DAYOFWEEK' ([[:alpha:]]{3}) [[:digit:]]{2} ([0-9:]+)' [[ $VA

    iww
    iww 2009/05/13
    flockコマンドについて
  • bashにて複数端末間でコマンド履歴(history)を共有する方法 (iandeth.)

    Tera Term 等の端末を複数同時に立ち上げて作業したり、screenにて複数の仮想端末を同時並行で操作する際、コマンド実行履歴が端末間で共有できなくて困る事が多々あります。「さっきのfindコマンドをもう一度... 引数どう書くんだっけなぁ... あ、確かコマンド履歴にあったはずだなぁ... ちっ、それはあっちの端末の履歴だったか」みたいな。zshには端末間のコマンド履歴を常に同期できる'SHARE_HISTORY' なるオプション(*1)があって素敵なのですが、同じことを bash で実現する方法を調べたのでご紹介。 (*1) zshの同機能について詳しくはITmedia記事 "豪傑の三種の神器【後編】" を参照の事 不具合) 通常設定のbashで困る事 1. 複数端末間でコマンド履歴の共有ができない 同時に立ち上げている端末間で履歴の共有ができなくて不便に感じることがある。 2.

    iww
    iww 2009/03/19
    historyの番号が毎回書き換わるので !数字 が全く使えなくなるという欠点がある
  • bash

    Linux においての「コマンド」とは、シェルによって実行ファイルが実行されていることを意味します。 たとえば ls コマンドをユーザが入力した際、その入力はシェルにとっての入力でしかありません。シェルはユーザから入力された ls という文字列を「ls という実行ファイルを実行する」と解釈し、カーネルに伝えます。 ls という実行ファイルを実行した結果がシェルによってユーザに伝えられ、あたかもユーザは ls という実行ファイルを直接実行したように感じることができます。 このように「実行したように」というのがユーザインタフェースとしてのシェルの役目です。 しかし、今回はスクリプト言語としての bash をメインに扱うので、この章は軽く流していただいて結構です。 ご存じのように bash はプログラミング言語(シェルスクリプト)のひとつとして動作します。 プログラミング言語として、最低限備わっ

  • .bash_profileと.bashrcの違いは

    ユーザーのホームディレクトリには、.bash_profileや.bashrcといったファイルがある。どんなファイルがあるかは、-aオプション付きでlsコマンドを実行すると表示される。 $ ls -a ./          .bash_history  .bashrc  .emacs           .rpmmacros  rpm/ ../         .bash_logout   .canna   .emacs-color.el  .screenrc   tmp/ .Xdefaults  .bash_profile  .cshrc   .emacs.el        .xemacs.el この中の.bash_profileと.bashrcは、共にログインしたときに実行される設定用のシェルスクリプトだが、両者にはもちろん違いがある。 .bash_profileは、ログイン時だけに

    iww
    iww 2008/11/07
  • ファイルの文字列置換 - odz buffer

    ref:某日記(中期) 複数のファイルの特定文字列を一括変換したい場合、 for i in *; do cat < "$i" | sed 's/AAA/BBB/' > "$i"; doneとすると良さそうに見えるけど、これってポータブルなのかねぇ。 tee を使って標準出力は /dev/null に捨てるとか。 for i in *; do sed 's/AAA/BBB/' < "$i" | tee "$i > /dev/null; done と思ったけど、良く考えるとこれも質的なところでは変わらない。 Linux だと cat の変わりに perl -ne 'print; sleep 1' とかにしてみると良く分からない挙動になるので*1、まあ、やめておいたほうがよさげ。 GNU の sed だと for i in *; do sed -i -e 's/AAA/BBB/' "$i";

    ファイルの文字列置換 - odz buffer
  • 複数のファイル拡張子を一括で変更するには

    複数のファイル拡張子を一括変更するには、bashのコマンドを使うのが簡単だ。例えば、*.tiffというファイルを*.tifに一括変更するには、以下のように行う。 $ ls 01.tiff  02.tiff  03.tiff  04.tiff  05.tiff ←拡張子はすべて.tiff $ for fname in *.tiff; do ←拡張子がtiffのファイルが存在する限り、以下の命令を繰り返す > mv $fname ${fname%.tiff}.tif; > done $ ls 01.tif  02.tif  03.tif  04.tif  05.tif

  • 処理系コレクション:Linux:bash

    算術式展開 $((算術式)) 例 #!/bin/bash #二つの引数を計算するスクリプト #引数1, 引数3 非演算子 #引数2 演算子 echo "$1 $2 $3 = $(($1 $2 $3))" shift shift 位置パラメータを左に一つシフトする。 例: $1 = hoge, $2 = age, $3 = sage の時 shift を実行すると $1 = age, $2 = sage になる。