トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

シェルプログラミング の変更点

Top / シェルプログラミング

*シェルプログラミング [#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/]]