アウトプットができる技術者に

it's a time to take a new step !

Bash

Bash 環境変数

全部出力 set

現在のディレクトリ配下の容量を確認する

find ./ -maxdepth 1 -type d | xargs du -chs Bash 目次 - How might I ...

Bash 配列

代入 arr=(1 2 3)単体出力 echo ${arr[0]} # => 1 echo ${arr[1]} # => 2全て出力 echo ${arr[@]} # => 1 2 3追加 arr+=(5 6) echo ${arr[@]} # => 1 2 3 5 6要素数 echo ${#arr[@]} # => 5ループ その1 N=`expr ${#arr[@]} - 1` for i in `seq 0 ${N}` do …

Bash 標準出力と標準エラー出力を同時に受け取る

標準出力と標準エラー出力を同時にテキストファイルい出力する #!/bin/sh echo "abc" | awk '{ print("abc") > "/dev/stdout" print("zzz") > "/dev/stderr" }' > std.txt 2> err.txt Bash 関数 - How might I ...

ftp batch 処理でファイル取得

他システム連携ではありがちなFTP取得も もちろんBatch化できる #!/bin/sh cd `dirname $0` host=xxx.jp id=foo pass=bar ftp -nv ${host} << _END user ${id} ${pass} cd /international.cute.coocan.jp/homepage/tmp prompt mget *.txt bye _END

Bash for文

list="a b c" for v in ${list} do echo "v=${v}" done デリミタの変更 通常はスペース区切でループになるのを変更できる。 例えば、テキストファイルをループするときは改行コードにする。 #!/bin/sh echo "1 b c" > tmp.txt echo "2 b c" >> tmp.txt IFS=$…

BashでBatchJobの設計のポイント

個人的なメモなので参考まで 設計時の心得 一般的に Batch処理は、前処理 > 本処理 > 後処理 となる 性能は考慮して作らないと後で泣きをみる リアルタイム / 更新頻度の高いジョブ 異常時は極力早く対応するため、アラートが出るようにしておく リカバリ対…

Bash 関数

Bashでは次のようにして関数を作れる #!/bin/bash hello_world(){ echo "hello world" } # 呼び出し hello_world ルール 呼び出す前に定義する必要がある 変数の前に local を付けないとGlobal変数扱いになる 戻り値は return 0 とかで戻す 一般的に正常終了…

Bash printf で 3桁区切りにする

printf "%'d" 1000 Bash目次

メール送信

mail コマンドは よく 他のmailコマンドにシンボリックリンクされてるので注意が必要 mailxとかnailとか単純送信 echo "body" | mail -s "subject" xxx@example.com添付ファイル付き echo "message.txt" > tmp/tmp.txt (echo "body"; uuencode tmp/tmp.txt t…

Bash 目次

[:title=Bashとsh] BashでBatchJobの設計 圧縮・解凍コマンド メール送信 printfで3桁区切り シェルスクリプトで標準入力を受け取る xargs 容量の確認 http://the-pleiades.hateblo.jp/entry/2014/06/07/160942 変数 配列 関数 Bash 関数 Bash 関数自体のス…

Java bashでcompileする

まぁ、書き方はいくらでもあると思うけど。 こんな よくあるディレクトリを想定した場合 ./lib ... library ./src ... source code ./bin ... binary (compiled java code)こんな感じで書ける export CLASSPATH=`find lib -type f -name "*.jar" | paste -s …

Bash 関数 スコープ

親シェルで 別のシェルに書かれている関数を読み込んだ場合、子シェルで、その関数は使えない。cat main.sh #!/bin/sh cd `dirname $0` . func.sh # func.shのhelloが呼べる hello ./child.shfunc.sh #!/bin/sh hello(){ echo "hello" }child.sh #!/bin/sh #…

圧縮解凍コマンド

gzでの圧縮 tar zcvf sample.tar.gz target_dir gzでの圧縮(ディレクトリ変更) tar zcvf sample.tar.gz -C target_dir . gzでの解凍 tar zxvf sample.tar.gz ディレクトリを変更下の圧縮の解説 ディレクトリごと 圧縮すると解凍時に ディレクトリ構成も残…

Bash シェルスクリプトで標準入力を受け取る

cat - で 標準入力を受け取り、利用できる。 #!/bin/sh if [ -p /dev/stdin ] ; then echo "stdin" cat - else echo "nothing stdin" fi 変数の格納する例 #!/bin/sh if [ -p /dev/stdin ] ; then a=$(cat -) echo "input string is ${a}" else echo "nothin…

ログとか旧いファイルの圧縮

フと書いて、これはなかなか使えるコマンドだなと思ったのでメモ30日以降 経過したlogファイルを圧縮。bzip2形式 find ./ -maxdepth 1 -type f -mtime +30 -name "*.log" | xargs -r bzip2 -vxargs の -r は 結果がなかった場合に、後続の圧縮コマンドを実行…