トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

シェルプログラミング のバックアップ(No.3)


シェルプログラミング

シェルで悩んだところのメモ書きです。

シェルの変数について

変数の意味は以下の通り

変数意味
$$シェル自身のPID(プロセスID)
$!シェルが最後に実行したバックグラウンドプロセスのPID
$?最後に実行したコマンドの終了コード(戻り値)
$-setコマンドを使って設定したフラグの一覧
$*全引数リスト。"$*"のように「"」で囲んだ場合、"$1 $2 … $n" と全引数を一つにくっついた形で展開される。
$@全引数リスト。"$@"のように「"」で囲んだ場合、"$1" "$2" … "$n" とそれぞれの引数を個別にダブルクォートで囲んで展開される。
$#シェルに与えられた引数の個数
$0シェル自身のファイル名
$1~$nシェルに与えられた引数の値。$1は第1引数、$2は第2引数…となる。

ほうほう、色々あるねー

ちなみに、以下のサイトを参考にしました。

リダイレクトについて

標準出力のリダイレクトは以下の通り

コマンド > aaa.txt

標準出力+エラー出力のリダイレクトは以下の通り

コマンド >& aaa.txt

へー勉強になった

ちなみに、追記の場合は、「>」→「>>」にすればいいよ

awk

awkはawkで何ページも書けちゃう内容なんだろうけど、とりあえず今日使ったやつだけ。

こんなテキストファイルがあります。このテキストファイルの名前が「Address.txt」だとします。
まあ、アドレス帳だと思ってください。

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は正規表現とかも使えるみたいだけど、今日はもうつかれた。リンクを参照。見れば多分出来ます。