Bash script

Contents


忘れがちなcase文のメモ

#!/bin/bash
case $MM in
  "01") MON="Jan" ;;
  "02") MON="Feb" ;;
  "03") MON="Mar" ;;
  "04") MON="Apr" ;;
  "05") MON="May" ;;
  "06") MON="Jun" ;;
  "07") MON="Jul" ;;
  "08") MON="Aug" ;;
  "09") MON="Sep" ;;
  "10") MON="Oct" ;;
  "11") MON="Nov" ;;
  "12") MON="Dec" ;;
esac
                  

日付の計算 (date の使い方)

$ date -d-30day +%F
2012-08-25
$ date -d2010-01-01+10day +%F
2010-01-11
                  

binary file にレコードを追加する方法

$ cat in.bin >> out.bin

eval の使い方

eval はコマンドを2回繰り返す。慣れれば簡単。

$ CTL0=flx-iso-n\${YEAR}.ctl
$ YEAR=2000
$ CTL=`eval echo $CTL0`
flx-iso-n2000.ctl
                  

応用。

$ CTL0=flx-iso-n\${YEAR}.ctl
$ YEAR=2000
$ NUM=0
$ CTL=`eval eval echo '$CTL'$NUM`
flx-iso-n2000.ctl
                  
応用のやつは、1回目のecho で「$CTL0」が返される。 2回目のecho で、「flx-iso-n${YEAR}.ctl」 が返される。 そして、最後の3回目のecho で、${YEAR}に2000が代入される。

/ (スラッシュ)の置換

$ file=/data/masatano/test.txt
$ echo $file | sed 's/\//\\\\\//g'
\/data\/masatano\/test.txt
                  
ポイントは2つ。 1.「\/」 を 「\\\\\/」(バックスラッシュ5個とスラッシュ1個)で置換する。 2.シングル・クォーテーションを使う。ダブル・クォーテーションだとうまく動作しない場合がある。

大文字・小文字の変換

初めの1文字だけ大文字にするには、${VAR^}。 全て大文字にするには、${VAR^^}。
$ VAR="ngongo"
$ echo ${VAR^}
Ngongo
$ echo ${VAR^^}
NGONGO
                  
その他の変換方法については下記サイトを参照。 http://qiita.com/kawaz/items/211266021515b3f033a3

文字の抽出

# 1文字目から4文字目まで抽出
$ echo ngo123 | cut -d-4
# 2文字目から4文字目まで抽出
$ echo ngo123 | cut -d2-4

文字コードの変換

日本語漢字フォームがそのままだと読めない。。。。。 文字コードを変換するため、"nkf" をインストールする。
$ sudo apt-get install nkf
あとは、下記のように実効すればOK 他の文字コードは、オプションで変更可 参考URL: http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230849/
$ nkf 001.CSV > out.txt