繰り返し処理を行う for文

複数の引数を処理するような
シェルスクリプトを書く場合、for 文を使用すると便利です
引数をある程度用意しておくのも対策のひとつに
なりますが、使いまわしするには不便です
理由としては、あとでまた引数を追加するのが
面倒なので、という理由ですが
for文の構文は

for 変数名 in リスト
do
処理
done

となります
このときに、リスト の部分には
$1 $2 $3
などというように、すべて記述する必要はありません
シェルスクリプトでは
$# が引数の数を表す記号
であったように
$@
という記号を使って洛に記述できます
$@すべての引数のリスト
という意味になります
このため
for file in $@
dp
ファイルの処理
done
とすれば、引数として指定するファイルの数を気にせずに
複数のファイルを処理することが可能になります
ちなみに、こういった処理の仕方を指定しないと
複数のファイルの処理はできないようです
実際、実験してみましたが
複数のファイルを指定したところ。最初のファイルしか実行できませんでした

雇用統計とユーロの問題点

最近は、ユーロの下落が目立つようになりました
ドル円が少し上昇しているので、クロス円は
そこまで暴落とはいきませんが、
対ドルでのユーロの下げが大きいため、どうしても
クロス円はマイナスとなります
また、中国での利上げ観測により、
いままで好調に上昇してきた豪ドルも、かげりが見えるように
感じます
豪ドルは、中国向けの輸出が好調で、その上資源高等により
かなりの上昇となっています
金利のさらなる利上げ期待も織り込んでいると
思われますが
対ドルでの上昇が進み、一時期はパリティを越えたのですが
ここ最近は下落基調です
また、NZドルに関しては
かつてクロス円が暴落を開始したころ(2007年ごろ)の
水準までロングポジションが増大しています
さて、このような状況のなかで
週末にむけて金利発表、そして米国の雇用統計がでます
個人的には、このイベントが終わるまで
相場は様子見したい気分です
欧州の金融危機が収まる気配が見えず、
その上、対ドルのロングポジションの積み上がり状況をみると
とてもクロス円のロングはつくろうとは思えません
今回の雇用統計の結果が
ドル売りとなるのか、それともリスク回避でドル買いになるのか
そのめどがつかないためです
個人的な予測でいえば、ユーロは売りです
債権の問題が主な原因なのですが
以前、書いたように、国債の入札そのものは
ある程度の時期になるまでは
IMF、ECB。ほかのユーロ加盟国などからの資金援助などにより
なんだかんだと言っても無事に終わると思われます
問題は、償還することができるのか?ということです
借りた資金は当然、返済しなければなりません
もし、返済できないとなると、いままで入札、つまり
債権を購入したところが連鎖破綻する可能性がおきます
通常、日本もそうなのだと思われますが
借りた金は、何年かにわけて償還されます
そして、その資金は、借り換え債を発行するなどして
償還されたりします
これができるのかどうかが問題となります
いわば、今のユーロ内部では
多重債務者を抱えているような状況です
この状況で。破産しそうな人にさらに
立ち直るための資金を援助するためにまた
貸している、という状況です
問題は根深く、改善の兆しが見れないのに
さらに貸しているので、どこかで限界が訪れると
思っています
このときに、再び金融危機が起きるのでは?
では、その時にはどのような対策がとられるのか
そして、どのような市場の動きをするのか
こういった点を考慮しながら取引することが必要になると思われます
現在、金の価格が上昇していますが
サブプライムのときには、信用不安により借入れができなくなり
保有していた金を売却し、資金にしたため
金価格の下落がおこりました
ちなみに、金価格は、史上最高値付近にいます
個人的には買う気がおきません
投資の鉄則は、安く買って高く売る
もしくは
高く売って安く買い戻す
です
株は配当金というキャッシュを生みますが
金そのものでは売却しないと利益はありません
いざというときに金を、という言葉を聞きますが
適正な価格で売却できるルート、そして
そのレートを把握できないのならば、
結局は損をするのはないのでしょうか?

シェルスクリプトでif 文 その2

シェルスクリプトでif 文
が長文になりそうなので
わけてみました
それでは、条件式のメモの続きです

num1 -gt num2

これは num1 が num2 より大きければ、という意味です
つまり
num1 > num2
というかんじです
もちろん、逆パターンもあります
それが
num1 -lt num2
です
これは num1 が num2 より小さいなら、となります
num1 < num2
というかんじです
ここまでが比較関連になります
これからが、ファイル検索などになります
-d ディレクトリのパス
ディレクトリが存在しているなら
という意味になります
if [ -f /home/backup ]
としたなら
/home/backup
が存在していれば、という意味になりますし
if [ -f $1 ]
なら引数に入力したディレクトリが存在しているなら
という意味になります
シェルスクリプトなどで使いまわす場合、
基本的にはファイル名や絶対パスを記述してしまうより
$1 など、引数を指定したほうが、あとあと使うときに修正せずにすみます
-e ファイルのパス
ファイルが存在しているなら、という意味になります
if [ -e $1 ]
$1 に入力したファイルが存在しているなら、という意味になります
仮に、/home/wiki/testfile
と入力した場合、
/home/wiki/testfile が存在しているならば、という意味になります
-r ファイルのパス
これは、ファイルが存在し、読み取り可能なら
という意味です
rは。readからきていると思われます
-w ファイルのパス
これも似たようなもので、
ファイルが存在し、書き込み可能なら
という意味になります
-a
たぶん、一番わかりにくいです
これは、論理式のANDと同じ意味です
C, java でいう && というものです
使い方としては
if [ -r $1 -a -w $1 ]
のように使うようです
これは
if [ $1が読み取り可能 && $1 が書き込み可能 ]
という意味になります
つまり、読み書き可能ファイルであれば
という意味になります

シェルスクリプトでif 文

今回も、前回の
便利なシェルスクリプト
の続きになります
今回は、if 文を追加しました
シェルスクリプトでのif文の構文は

if 条件式
then
処理
fi

というように
if で始まり
fi で終わります
また、C言語などでよくある
if else のように使うには
if 条件式
then
処理
else
  処理
fi

というようになります
さて、今回、わかりにくかったところがあるので
メモがわりに記述してみました
if [ $# = 0 ]
という表現があるのですが
これを記述するときには
[ と ] の間には必ず半角スペースをいれないとなりません
これを普通にCやjava のように詰めてしまうと
エラーになります
原因は
[
]
などもコマンドであるためです
じつは、引数で並べてみると
[ コマンド
$# 引数1
= 引数2
0 引数3
] 引数4
という扱いになっています
コマンド、つまり cd とか chown というものと
同じ扱いなので、これらのコマンドを使用するときには
引数の間に空白をいれていたようにすることになります
<例>
chown +x file3
これを、空白をいれずに
chown+xfile3
だとエラーになります
もうひとつわかりにくいのが
$#です
これは引数の数を表す記号です
つまり、
if [ $# = 0 ]
という文の意味は
引数の数が0なら
という意味になります
引数の数が0、つまりないということは
例を出すなら
cd
という入力をした状態です
cd /home/
これだと引数は1になります
また、シェルスクリプトには
様々な条件式があります
シェルスクリプト 条件式
というように検索すると、かなりでてきます
主なもののリンクとしては
シェル・スクリプト・リファレンス INDEX
などがあります
主なものとしては
str1 = stt2
というような、今回の $# = 0 というような使い方です
これは、C や java でいう == みたいなものです
ただし、比較するのは文字列です
str1 != str2
これも同じようなもので
否定形です
~でないなら、という意味です
$# != 0
とすると、引数の値が0でないなら
という意味になります
これも同様に文字列の比較です
これらは割とわかりやすいのですが
数値比較になると、ちょっとわかりにくい表現になります
num1 -eq num2
この場合、数値が同じならという意味になります
C , Javaなら
num == num2
というかんじです
続いて
num1 -ne num2
これは否定形です
さきほどの != と同じ意味ですが
こちらは数値の比較になります

XAMPP で WordPress その2

XAMPP で WordPress
の続きになリます
一度停止しているので、
再度
/opt/lampp/lampp start

XAMPP を起動します
次に
/opt/lampp/bin/mysql -u root -p
でログインし
create database wordpress character set utf8;
でデータベースを作成します
grant all privileges on wordpress.* to username@localhost identified by ‘password’;

ユーザとパスワードを設定します
username@localhost
はユーザ
‘password’
がパスワードになります
設定を反映するには
flush privileges;
を実行します
MySQL は、参考書などをみると大文字ですが
基本的には小文字でも大文字でも入力はできるようです
ただ、分かりやすさを考慮すると、やはり大文字での
記述が好ましいと思います
ここまで終了したら、続いて。
firefox を立ち上げて、
http://localhost/wordpress
にアクセスします
すると、初期設定画面がでてくるので
デフォルトで
作成をクリックします
この設定を完了した後に
端末に移動し
chown nobody /opt/lampp/htdocs/wordpress/wp-config.php
chmod 600 /opt/lampp/htdocs/wordpress/wp-config.php
で設定ファイルを管理者以外に読めないように変更します
この設定完了後
再び firefox に戻り
インストール実行
をクリック
したら
必要な項目を記入し
wordpress をインストール
をクリックし
インストールを完了します
しかし、残念ながら
localhost でのアクセスは可能なのですが
なぜか他のローカルネットのPCからでは
アクセスできません
この件については
また調べてみようと思います
※原因が判明しました
ファイアウォールにより弾かれていました
このため、XAMPP を起動しているPCで
iptables -F
を実行することで、ローカルネットでの閲覧が可能になります

XAMPP で WordPress

今回も、日経Linux に載っていた内容をもとに
XAMPP でWebアプリの勉強です
今回の参考雑誌は

です
今回使用する WordPress 3.0.1 は
付録のDVDに収録されていますので
これを使います
DVDを入れて
/media/Ubuntu 10.10 i386 Japanese/article/rensai_server
にある
WordPress 3.0.1

cp -p /media/Ubuntu 10.10 i386 Japanese/article/rensai_server/wordpress-3.0.1-ja.zip /home/wiki/Download
で付録DVDから自分のパソコンへコピーします
次に suコマンドで管理者権限になり
XAMPP を起動します
/opt/lampp/lampp start
このときに、XAMPPで起動するサービスとかぶるとエラーになります
もし、XAMPPで起動するなら
Apache , MySQL ProfFTP などを起動しているなら
それらを停止する必要があります
/etc/rc.d/init.d/httpd stop
/etc/rc.d/init.dmysqld stop
で止まるはずです
あとは unzip に -d オプションをつけて解凍するそうですが
なぜかエラーです
おこなった操作は
unzip -d /opt/lampp/htdocs/wordpress-3.0.1-ja.zip
unzip に関しては
検索してもでてこないので、
$man unzip
でリファレンスをみました
しかし、解決には至らないので
unzip wordpress-3.0.1-ja.zip
で一度解凍して、このファイルを
mv wordpress /opt/lampp/htdocs/
で移動します
※解決しました
ただ、単純にタイプミスでした
unzip -d /opt/lampp/htdocs/wordpress-3.0.1-ja.zip
ではなく
ダウンロードしたディレクトリ、もしくは
圧縮ファイルをコピーしたディレクトリに移動して
unzip -d /opt/lampp/htdocs/ wordpress-3.0.1-ja.zip
で展開できます
最後の
wordpress-3.0.1-ja.zip
の前にスペースがなかったのが原因でした
引き続き、オーナーの変更を行います
chown nobody /opt/lampp/htdocs/wordpress
chown nobody -R /opt/lampp/htdocs/wordpress/wp-content
ここまで完了したら、次に MySQL による設定を行います
ちなみに、chown の -R オプションは
その下にあるすべてのファイルやディレクトリのオーナーを
変更するという意味です
詳しい説明は
お便利サーバー.comの記事の
“chmod”パーミッションを変更する
に載っています

便利なシェルスクリプト

コマンドを打ち込むときに、タイプミスをしたり
打ち込むのが面倒ということが多々あります
そんなときに役立つのがシェルスクリプトです
たとえば、testfile をtestfile2 というファイルにコピーするときには
通常
cp -p testfile testfile2
というようにします
しかし、毎回コピーするときに打ち込むのは面倒なので
ファイル名に2をつけてバックアップするには
vi backup2
でファイルを作成し
内容を
cp -p ${1} ${!}2
として保存
chmod +x backup2
で実行権限を与えて
./backup2 testfile
と実行すれば
testfile2
が作成されます
今回のわかりにくい点は
${!}
という記号です
これは、シェルスクリプトで使う記号で
意味は 引数1
を意味しています
もう少し載せると
$0 がコマンド名
$1 が引数1
$2 が引数2
$3 が引数3
となっていきます
コマンドと引数の関係を cp コマンドで例えると
cp -p testfile testfile2
の場合なら
cp  が $0
tetfile が $1
testfile2 が$2
というかんじです
オプションは引数には入らないはずです
これを活用するとかなり楽になります
ちなみに、今回
vi backup2 の内容で
cp -p ${1} ${!}2
となっていますが
コピーしたファイルの名前をbackupというようにつけたいのなら
cp -p ${1} ${!}backup
というように変更することでできます
このように、引数などを使うと
tr コマンド
で行った作業の
tr -d ‘\r’ < testfile > testfileTmp
mv testfileTmp testfile
についても
vi ModeLF
でファイルを作成し
中身を
#!/bin/bash
tr -d ‘\r’ < ${1} > ${1}Tmp
mv ${1}Tmp ${1}
で保存して
chmod +x ModeLF
とすることで同様の作業ができるようになります
引数を使う最大のメリットは
ファイル名を記述すると、そのファイルにしか適用できないのに対し
引数を指定した場合なら、他のファイル名でも使用できるのが
最大のメリットとも言えます

tr コマンド

trコマンドは -d オプションをつけて実行すると
指定した文字を削除できます
これを使えば、
文字コードと改行コード
ででてきた
Linux と Windows の改行コードの問題を処理するときに使えそうです
ただし、この trコマンドを使うときには注意が必要です
trコマンドは標準入力から読み込み標準出力に書き出します
このため
引数にファイルを指定することはできないので
入力リダイレクトを使います
このときに、
ファイルを直接変更しようとして
tr -d ‘\r’ < testfile > testfile
としてしまうと
ファイルの中身がクリアされ、空ファイルとなってしまうのです
このため、一度別のファイル名で書き出してから
再度 mv コマンドでファイル名を変更する必要があります
tr -d ‘\r’ < testfile > testfileTmp
mv testfileTmp testfile
これで空ファイルになることがなくなります
ちなみに、od コマンドを実行すると
改行コードを調べることができます
とはいっても、文字コードがでるのではなく
改行しているところが
\r \n
なら
改行コードが CRLF
/n
なら
改行コードが LF
というように、自分で文字をみて判断することになります
odコマンドに関しては
【 od 】 バイナリ・ファイルの内容を閲覧する
に説明が載っています

地政学リスクというもの

本日、北朝鮮から韓国への砲撃の報道により
ドル買い円売りとなりました
これはいわゆる地政学リスクというものです
リスクがあるために、そこの通過が売られるわけですが
以前にも北朝鮮から日本海あたりにミサイルが打ち出されたときに
同様に円安となりました
以前は、何か戦争などが起きる可能性があったときに
有事のドル買い
とも言われるドルが買われる現象がありましたが
2001 年の テロのとき以降は
どちらかというとドル売りになる傾向が強くなった気がします
地政学リスクには、地震、テロ、紛争など
その地域に関するリスクとも言えます
ただ、よほどのことがないかぎり、
トレンド変換にはなりにくいので、そういう要素もあるんだ
という認識ぐらいでいいと思います

文字コードと改行コード

Windows と Linux を使っている場合
結構な確率で問題になるのが、文字コードと
改行コードの問題です
これが原因で、Windows で作ったものが
Linux でまともに使えないということが多々あります
多くのLinux ではUTF-8という文字コードですが
Windowsの場合、Shift-jis という文字コードです
また、文字コードだけでなく
改行コードの違いもエラーの原因となります
Linux が改行には LF つまり \n になるのに
Windows では改行に CRLF つまり\r\n となっています
ここで、変換ツールのnkf を使うことで
この問題に対処することができます
インストールは redhat系なら
yum -y install nkf
でインストールできます
使い方は
nkf 変換したい文字コード 変換したい改行コード –overwrite ファイル名
となります
文字コードの変換については
-w
UTF-8に変換
-e
EUCーJPに変換
-i
JISコードに変換
-s
Shift-jis に変換
となっています
改行コードについては
-Lu
改行コードをLFへ変換
-Lw
改行コードをCRLFへ変換
-Lm
改行コードを CR へ変換
となります
例をあげると
testfile を UTF-8にするには
nkf -w -Lu –overwite testfile
とします
また、このファイルを Shift-jis にするなら
nkf -s -Lw –overwrite testfie
とします
こういった説明を見たあとに
サイト内検索システム構築(Namazu)
にある
nkf -w /usr/local/var/namazu/index/centos/NMZ.head.ja>NMZ.head.ja
文字コードをUTF-8へ
とか
nkf -e NMZ.foot.ja>/usr/local/var/namazu/index/centos/NMZ.foot.ja
文字コードを EUC^-JP へ
とかのページをみるとわかりやすいと思います
ちなみに、Windows でPDF変換したファイルをFTP転送したときに
文字化けしているのは、おそらくはこれが原因と思われます