bashのfor文でよく使うものメモ
bashでfor文はとても便利。
for?inを使う IP=128.0.0 for i in 1 2 3; do echo “${IP}.$i” done # 実行結果 128.0.0.1 128.0.0.2 128.0.0.3 lsを使ってディレクトリにあるファイル名でループ for textfile in $( ls . ); do echo “${textfile}” done # 実行結果 000.csv 000.txt 001.txt lsをさらに応用して拡張子txtだけループ for textfile in $( ls . | grep .txt$ ); do echo “${textfile}” done # 実行結果 000.txt 001.txt catでファイルを読み込んで処理するループ # 000.txt line01 line02 line03 for line in `cat 000.txt`; do echo “${line}” done # 実行結果 line01 line02 line03
空の行が読み飛ばされているのが素敵。
catでファイルを読み込んで処理するループその2 # 000.txt line 01 line 02 line 03 for line in `cat 001.txt`; do echo “${line}” done # 実行結果 line 01 line 02 line 03
これも空の行が読み飛ばされ、半角スペースごとにループしている。
配列をつかってループ array=( array01 [...]
ユーザーレベルでパスを通す
jdkなんかはバージョンが違って複数ある場合もあるわけだ。そんなときに、「これ!」ってPATHを通されると固定されてしまうので、「自分はこれをつかうのだ」とユーザレベルでPATHを通してみる。
パスの確認 echo $PATH ユーザレベルでパスを通す cd /~
vi .bash_profile
で開いて、export PATHにこんな感じで
export PATH=/java1.4/bin:$PATH
保存したらコンソールに戻って
source .bash_profile
と打てば反映される。
bash使用時に.bash_profileがよまれるが、これがなかったら(bashがない環境などでは).profileを使う。
AIXで性能を調べたときのメモ
Linux起動時に実行されるサービスを登録する
chkconfigコマンドを使えば簡単に登録できる。
まず、/etc/init.dにfujiharadaemondみないなデーモン起動用のスクリプトを置く。「デーモンプロセス制御のシェル関数を使ったデーモン登録」のようなスクリプトでなければならない。
このスクリプトで
# chkconfig: 2345 90 60
というコメントが重要で、「2345」はどのランレベルで実行されるか。90は起動時の優先順位。60は停止時の優先順位となる。
これがないと、「chkconfig -add fujiharadaemond」したときに「対応していない」と怒られる。
あとは、
chkconfig –add fujiharadaemond
で登録して、
chkconfig –list
で確認すればよい。
シェルでよくつかう処理まとめ
シェルを作るときに気にする
2重起動防止 pidファイルの確認 プロセス起動確認
を「/etc/init.d/functions」を使って実装してみる。
. /etc/init.d/functions SCRIPT_NAME=testscript PID_FILE=/var/run/${SCRIPT_NAME} # 起動の確認 ここで一気に確認 pidofproc ${SCRIPT_NAME} if [ $? -eq 0 ]; then echo “プロセスは既に起動しています” exit 1 fi # pidファイルが残っている場合の処理 if [ -f ${PID_FILE} ]; then echo “プロセスは停止していますがPIDファイルが存在します” echo “${PID_FILE}を削除します” rm -f ${PID_FILE} fi touch ${PID_FILE} echo $$ > ${PID_FILE} # 以下処理・・・
bashでechoした文字の色を変える
if [ "$str" == "false" ];then #明るい緑 [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS echo “I’m fujihara” [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL else #赤 [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE echo “I’m fujihara” [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL fi
デーモンプロセス制御のシェル関数を使ったデーモン登録
スクリプトをバックグラウンドで動作するデーモンとして登録する方法。
「/etc/init.d/crond」を参考に調べた。
ここで使われるフォルダは以下になる。
/proc ・・・プロセス情報が入っている /var/lock/subsys ・・・ lockファイル作成ディレクトリ /var/run ・・・ プロセスIDが書かれたファイルを書き出す場所 /etc/init.d/functions
「/etc/init.d/functions」にはデーモンの制御に便利なシェル関数が書かれている。プロセスの確認、開始メッセージ表示など、普通のシェルでも使える内容になっている。
checkpid PID
指定されたPIDで起動していれば0、それ以外は1。「/proc」以下にPIDのフォルダがあるかで判断している。
daemon {+/-nicelevel} {program}
プログラムを開始する。
killproc [-d delay] {program} [signal]
プログラムを停止する。「/var/run」にあるPIDファイルは削除してくれる
pidfileofproc {program}
プログラムのPIDをみつける。「/var/run/{program}.pidのみ確認する。
PIDファイルがあれば0・・・なんだろうけど、return 1をしていないため、絶対0がかえってしまう。バグ?
以下の文で、PIDが不正かどうかチェックしている。
# First try “/var/run/*.pid” files if [ -f /var/run/$base.pid ] ; then local line p pid= read line < /var/run/$base.pid for p in $line ; do [ -z "${p//[0-9]/}” -a -d /proc/$p ] && pid=”$pid $p” done if [ -n "$pid" ]; then echo $pid return 0 fi fi
プロセスIDを確認する以下の部分では、まず0から9の数値をすべて空文字におきかえることができるかと、/proc/にプロセスIDのフォルダが存在するかで確認している。
[ -z "${p//[0-9]/}” -a -d /proc/$p ] && pid=”$pid $p”
プロセスIDが空文字の場合はのちの「if [ -n "$pid" ]; then」で引っかかる。
pidofproc {program}
プログラムのPIDをみつける。「/var/run/{program}.pidをまず探し、それでなければ「pidof」コマンドを使って探す。存在すれば0を返す。それ以外は1。
status {program}
プログラムのステータスを確認する。
echo_success
成功メッセージ表示。
[...]
bashでシェルが動作するディレクトリを考える
シェルをかくときに 、そのシェルがどこで動くかを考えなければならない。
例えば、「/tmp/fujihara/sh」にtest.shを作ったとする。テストシェルは「mkidr ./logs」コマンドでログ用のフォルダを自動で作る。
現在「/tmp」にいるとして、このスクリプトを「./fujihara/sh/test.sh」とたたけば、「/tmp/logs」ができる。しかし、「/tmp/fujihara/sh」にいて「./test.sh」とたたけば、「/tmp/fujihara/sh/logs」ができる。
このように、ユーザの位置によって、作るフォルダなどがかわってくると管理が大変。あちこちに一時フォルダができたりしてしまう。「実行場所に作業フォルダやシェルの結果ファイルなどを作る」というポリシーがなければ、シェルのいる場所に作るようにスクリプトをしておいたほうがいいと思った。
シェルの置かれているパスを取得する
シェルの中では「$0」に実行されたコマンドが入る。「/tmp/fujihara/sh/test.sh」だったり「./sh/test.sh」する。これだと「`dirname $0`」としても絶対パスか相対パスか確定できないので、以下のコマンドを使う。
which $0
これで「/tmp/fujihara/sh/test.sh」のような絶対パスが取れる。あとはdirnameコマンドで、ディレクトリまでを取得すればOK。
SHPATH=`which $0` REALDIR=`dirname $SHPATH`
bashに入門
viを覚えるのを嫌がってから数ヶ月。おかげで、viの文字検索までできるようになった。シェルを使うようになって気がついたことなどをメモ。
基本の基本 シェルは「fujihara.sh」みないな名前だけど、拡張子は関係ない シェルの頭には「#!/bin/bash」とおまじないをかく 実行権限を「chmod +x fujihara.sh」みたいにつけないと動かない 改行コードはLFになる
上記をおぼえたら、シェルを書き始めることができるようになった。
基本 2重起動のことを考えなければならない カレントディレクトリと、シェル本体が置かれるディレクトリは異なる可能性がある。シェルが実行される場所を意識しなければならない バックグラウンドで動かす場合は止めることも考えなければならない 標準出力等をログに出している場合は、ログのサイズが大きくならないようにlogrotateなどを考慮しなければならない
上記を覚えたら、最低限考えることがわかった。
僕について
Dai Fujihara
A hero can be anyone.
藤原大はマネージャでありアジャイル実践者だ。そして、プロジェクトリーダー、チェンジ・エージェント、アジャイルコーチ、トレーナーでもある。彼はまたRedmine、Jenkinsといった開発を支援するツール環境の整備や、アジャイル開発を活用した創造的なソフトウェア開発の支援を行っている。さらに、趣味は沖縄離島巡りらしい。
ここ最近の人気
アジャイルコミュニティは超めんどうくさい… 984 view(s)
3年使ったRedmineの使い方について共有したい10の… 581 view(s)
チームとタワーを創造せよ!マシュマロチャレンジでチームビ… 314 view(s)
Javaで入力チェックに使える正規表現まとめ… 209 view(s)
Redmineプラグイン開発 – 史上最高のチームプラグ… 157 view(s)
開発ツールを使うと「思いやり」が減る(前半) #swat… 128 view(s)
開発ツールを使うと「思いやり」が減る(後半) #swat… 124 view(s)
Redmineプラグイン開発 – パーキングロットチャー… 101 view(s)
DAOとかDTOとかVOとかEntityとか… 94 view(s)
LinkStationのようなNASを買ってもバックアッ… 93 view(s)
永久保存の本
Jonathan Rasmusson (著), 西村 直人 (翻訳), 角谷 信太郎 (翻訳)
アジャイルサムライ―それはソフトウェアを顧客に届ける猛々しきプロフェッショナルだ。本書では、圧倒的なアジャイルプロジェクトの姿を見せる。2011年爆発的にヒットしたアジャイル開発に情熱を持つエンジニアに届けたい本。
Mike Cohn (著), マイク コーン (著), 安井 力 (翻訳), 角谷 信太郎 (翻訳)
採用した現在のタイトルは、見積りや計画づくりといったプロセスを、アジャイルに進めなければならないと謳っているのだ。見積りと計画づくりがアジャイルでないのに、プロジェクトがアジャイルであるということはありえない。(イントロダクションより)
Venkat Subramaniam (著), Andy Hunt (著), 木下 史彦 (監訳), 角谷 信太郎 (監訳)
アジャイルな習慣とは一体何なのか?本書ではプラクティスを交えながら、その姿勢を読者に問いかけている。世代や役割をこえて色褪せない「アジャイル」に対する良書。Amazonレビュー
メアリー・ポッペンディーク (著), トム・ポッペンディーク (著), 高嶋 優子 (翻訳), 天野 勝 (翻訳), 平鍋 健児 (翻訳)
「トヨタ生産方式」を源流にする「リーン開発」をソフトウエア開発に取り入れるための具体的方法を紹介した本です。本書は、リーンの7大原則を「価値」「ムダ」「スピード」「人」「知識」「品質」「パートナー」に整理し、ソフト開発現場にどうしたら効果的に適用できるかを、多くの実例を交えながら具体的に説明します。
タグ
Agile ant Apache bash Eclipse GlassFish install Java Javascript kobo Linux log4j Management Maven Open Source PHP Pukiwiki Python Redmine Ruby Ruby on Rails Scrum Spring Struts Struts2 Subversion Test Tomcat Trac VBA Web WebDriver WebLogic Windows WordPress 働く 勉強会 嫁(ベータ) 思い出し笑う 我思う 旅する 映画/ドラマ 英語を話す 読むと聞く 過去を語るアーカイブ









