どちらかというとごはん派

主に仕事用のメモブログ。

【bash】 シェルからjavaを呼ぶ ①実行編

2008年10月16日 16時16分18秒 | linux bash
・条件①
 事前にjavaがインストールされていること。
 javaのインストールに関しては、他エントリーでじっくり説明します。

・条件②
 javaファイルを設定してコンパイル済みであること。
 (javac Test.javaを行っていること)

Test.javaの中身-----------------------------------------
public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
  System.out.println("Javaファイルを実行!");
 }

}
--------------------------------------------------------

Test.shの中身-------------------------------------------
#!/bin/sh
java Test
--------------------------------------------------------

実行するコマンドを叩く
$ sh Test.sh
Javaファイルを実行!

↑出力されることを確認する。


■DURAS 店舗一覧(ショップリスト)

2008年10月15日 22時40分26秒 | shop
・渋谷109
・LUMINE EST 新宿
・LUMINE 北千住
・LUMINE 立川
・千葉オーロラモールジュンヌ
・横浜CiALL
・大宮アルシェ
・名古屋PARCO
・広島PARCO
・仙台フォーラス
・静岡109
・松山AVA
・近鉄Pass'e(名古屋)
・高崎VIVRE店
・三井アウトレットパーク ジャズドリーム長島

■参考
http://www.duras.jp

【bash】 echoとprintfの違い

2008年10月14日 14時45分06秒 | linux bash
echo "test" > work.txt
printf "test" > work.txt

上記2つは同じ動作をするので、大きく違いはないし
変数+文字列の出力をprintfで行うことが多いが、
echoでも実現可能であるから、好みで使えば良いと思う。

ただ1点、改行に関してechoは注意が必要。

例えば FreeBSD・Linux 系は改行のオプションが -n 、
Solaris など SystemV 系は \c 、
bash は -n 、
tcsh はデフォルトでは -n だがシェル変数 echo_style で変更可能。
改行について悩みたくない場合は、echo コマンドではなく printf コマンドを使うこと。

echo と異なり、改行させたい場合 \n を付ける事。

% printf "abc"; printf "def"
abcdef

文字列を表示するには %s を使う
% printf "HOME=[%s]\n" $HOME

複数のフォーマットも指定できる
% printf "HOME=[%s] USER=[%s]\n" $HOME $USER

数値は %d を使う
% printf "[%d]\n" 30
[30]

5桁で右詰め
% printf "[%5d]\n" 30
[ 30]

5桁で左詰め
% printf "[%-5d]\n" 30
[30 ]

5桁でゼロパディング
% printf "[%05d]\n" 30
[00030]


【bash】 環境変数の設定

2008年10月10日 10時54分14秒 | linux bash
環境変数とはシェルから起動されたすべてのプロセスに有効な変数のこと

■設定方法
$ FILE=abcd.txt
$ export FILE

また、以下のように1つのコマンドで設定することもできる。
$ export FILE=abcd.txt

ちなみに確認方法はenvコマンド。

こうすると、全てのプロセスにおいて
「$FILE」という変数が「abcd.txt」という値を持つ。

これをシェルが起動したときに行いたい場合
■設定方法
/etc/bash.bashrcに
$ FILE=abcd.txt
$ export FILE
を追記して保存

■確認してみる
$ env
FILE=abcd.txt
↑出てる

■参考資料
http://jo1upk.blogdns.net/linux/?Linux%2F%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%AE%E8%A8%AD%E5%AE%9A

【bash】 eval  環境変数を2重展開する

2008年10月09日 14時06分20秒 | linux bash
ファイルから環境変数を文字列で取得してきたが、
文字列として変数に入っているため、展開されない場合
evalコマンドを使用して、2重展開を行う。

・ファイルの中身はこんな感じ
$ cat work.txt
TEST=$DATA_DIR

・ちなみに環境変数は事前に$DATA_DIRを設定。表示するとこんな感じ。
$ env
JAVA_BINDIR=/usr/lib/jvm/java/bin
INPUTRC=/etc/inputrc
DATA_DIR=/root/test

つまり、やりたいことはファイルから「TEST」でgrepし、「$DATA_DIR」という文字列を取得する。
取得した「$DATA_DIR」は、環境変数で設定してあるから、最終的に「/root/test」をとって来たい。

■陥ってしまった失敗
$ IN_DIR=`cat work.txt | grep 'TEST' | cut -d'=' -f2`
$ echo $"$IN_DIR"
$DATA_DIR

ここまでは大丈夫。
いざlsで見に行くと・・・・
$ ls -l $IN_DIR
ls: cannot access $DATA_DIR: No such file or directory

となってしまう。

これ、何がダメかというと「$DATA_DIR」という名のディレクトリがありませんよ。
ということである。確かにないので。
「$DATA_DIR」→「/root/test」に展開されていないわけ。

そこでevalを使って「$DATA_DIR」→「/root/test」に展開させる。

■うまくいった
$ IN_DIR=`cat work.txt | grep 'TEST' | cut -d'=' -f2`
$ echo $"$IN_DIR"
$DATA_DIR

ここまでは一緒。
いざevalを使ってlsすると・・・
$ ls -l `eval echo $"$IN_DIR"`
total 12
-rw-r--r-- 1 root root 570 Oct 8 19:07 aa.txt
-rw-r--r-- 1 root root 558 Oct 8 15:58 test.sh

見れた。

ディレクトリ管理を環境変数で行っていたり
ファイルで管理することはディレクトリ構造の変更時の対応が楽なので
知っておくこと。

【bash】 date 現在日付、時刻を指定して取得

2008年10月09日 12時26分15秒 | linux bash
dateコマンドは、現在の日付と時刻を表示するコマンド
$ date
Thu Oct 9 12:12:38 JST 2008

大きく2つの機能を持つ。
①指定した形式で表示する
$ date +"%Y/%m/%d %p %I:%M:%S"
2008/10/09 PM 12:13:58

$ date +%Y%m%d
20081009

②指定した日付や時刻を表示する
$ date -d '1 days ago'
Wed Oct 8 12:15:59 JST 2008

※ 「-d 'N days ago'」で N 日前の日付を取得できる。
 「-d '1 days'」はN日後。

# 現在日時から10秒前の日時を求める
$date -d '10 seconds ago'
Thu Oct 9 12:19:11 JST 2008

そして、日付を指定して尚且つ形式も指定したい場合(①+②)
$date -d '1 days ago' '+%Y%m%d'
20081008

もちろん「`」でくくって変数に設定することも可能

■参考
http://www.geocities.jp/geo_sunisland/date.html