*シェルプログラミング [#la473fd9]
シェルで悩んだところのメモ書きです。
***シェルの変数について [#p62c25da]
変数の意味は以下の通り
|変数|意味|
|$$|シェル自身のPID(プロセスID)|
|$!|シェルが最後に実行したバックグラウンドプロセスのPID|
|$?|最後に実行したコマンドの終了コード(戻り値)|
|$-|setコマンドを使って設定したフラグの一覧|
|$*|全引数リスト。"$*"のように「"」で囲んだ場合、"$1 $2 … $n" と全引数を一つにくっついた形で展開される。|
|$@|全引数リスト。"$@"のように「"」で囲んだ場合、"$1" "$2" … "$n" とそれぞれの引数を個別にダブルクォートで囲んで展開される。|
|$#|シェルに与えられた引数の個数|
|$0 |シェル自身のファイル名|
|$1~$n|シェルに与えられた引数の値。$1は第1引数、$2は第2引数…となる。|
ほうほう、色々あるねー
&br;&br;
ちなみに、以下のサイトを参考にしました。
-[[シェルスクリプト入門:http://www.k4.dion.ne.jp/~mms/unix/shellscript/index.html]]
***リダイレクトについて [#ld20af95]
標準出力のリダイレクトは以下の通り
コマンド > aaa.txt
標準出力+エラー出力のリダイレクトは以下の通り
コマンド >& aaa.txt
へー勉強になった
ちなみに、追記の場合は、「>」→「>>」にすればいいよ
***awk [#y1919cd4]
awkはawkで何ページも書けちゃう内容なんだろうけど、とりあえず今日使ったやつだけ。
こんなテキストファイルがあります。このテキストファイルの名前が「Address.txt」だとします。&br;
まあ、アドレス帳だと思ってください。
firstName lastName address phoneNo
Shogo Miyazaki Tokyo 090-xxxx-yyyy
Tatsuya Akasaka Osaka 080-aaaa-bbbb
Mayuko Kobayashi Osaka 080-aaaa-bbbb
Hana Takahashi Nagoya 070-cccc-dddd
Tarou Omori Nagoya 070-cccc-dddd
・・・・
このアドレスの、苗字だけほしい場合、こんな感じにawkです。
[root@server tmp]# awk '{print $2}' Address.txt
lastName
Miyazaki
Akasaka
Kobayashi
Takahashi
Omori
へー、2列目だけ取れた。
じゃあ、このアドレス帳のなかで、Address(住所)が「Osaka」の人のlastName(苗字)がほしいとき、こんな感じでawkします。
[root@server tmp]# awk '$3=="Osaka" {print $2}' Address.txt
Akasaka
Kobayashi
へー、大阪の人だけ取れた。
ちなみに、|をつかってつなげることも出来ます。つなげるイメージはこんな感じ。
[root@server tmp]# cat Address.txt | awk '$3=="Osaka" {print $2}'
Akasaka
Kobayashi
ちなみに、こうやっても同じ
[root@server tmp]# cat Address.txt | grep Osaka | awk '{print $2}'
Akasaka
Kobayashi
最初の一人だけほしい場合
[root@server tmp]# cat Address.txt | grep Osaka | head -1 | awk '{print $2}'
Akasaka
ずいぶん色々出てきた。
awkは正規表現とかも使えるみたいだけど、今日はもうつかれた。リンクを参照。見れば多分出来ます。
-[[awk の使い方:http://www.iplab.is.tsukuba.ac.jp/script/www.osdp.is.tsukuba.ac.jp/hosokawa/awk/]]