今日の日付を取得
書式指定ができる(以下の場合は8桁)
date + %Y%m%d
forループでループする数字の桁を揃える
3桁に揃えたい場合。
sample.sh
for i in`seq-f %03g 1 100`do
hogehoge
done
複数行のecho
いちいちテキストファイルに出力しなくてもいいんです。
sample.sh
{echo 0 1
echo 0 4
}
とすると
0 1
0 4
と出力。
オプションを定義
スクリプト実行時にオプションをつけたい場合は、コマンドラインで
bash sample.gmt -I[filename] -O
スクリプト中では、
sample.gmt
CMDNAME=`basename$0`while getopts I:O OPT # オプションに引数が必要な場合は":"をつけるdo
case${OPT}in# 該当するものがあるか、上から順にチェック"I")FLAG_I="TRUE";filename=${OPTARG};;"O")FLAG_O="TRUE";;*)echo"Usage: ${CMDNAME} [-I filename] ";exit;;# 該当するものがなかった場合、終了esacdone
ループ内変数をループ外で使う
以下のようにしてしまうと、ループでの計算結果が反映されない
sample_error.sh
i=0
cat${file} | while read dummy num
do
if[$num-lt 0 ];then
i=$((i+num))fi
done
echo$i
パイプをやめるとうまくいった
sample_correct.sh
i=0
for num in`awk'{print $2}'${file}`do
if[$num-lt 0 ];then
i=$((i+num))fi
done
echo$i
小数演算
exprコマンドなどでは、整数演算ができるが、小数演算ができない。そこで、
echo"3.5+1.2" | bc
とすれば、
4.7
と返ってくる!桁数を指定したい場合は、
echo"scale=3;10.0/3.0" | bc
とすれば、小数点以下3桁で計算されて、
3.333
if文の条件判定
演算子 | 意味 |
---|---|
-eq | equal |
-ne | not equal |
-lt | less than |
-le | less than or equal |
-gt | greater than |
-ge | greater than or equal |
-e | check existance |
-d | check directory |
-f | check file |
-n | not empty |
if文で小数の大小判定をしたい
直接if文のなかで処理できないので、工夫が必要
sample.sh
result=`echo"$x>= $y" | bc`;echo${result}if[${result}-eq 1 ];then
echo"$x>= $y"
hogehoge
else
echo"$x< $y"
piyopiyo
fi
行番号をつけて出力
sample.sh
nl-w$num${filename}>${outfile}#numは桁数
画像サイズを変更 (convert)
画像サイズを変えたいとき、
convert ${infile}-resize${width}x${height}${outfile}
タテヨコ比を無視したいときは、!をつければよい
convert ${infile}-resize${width}x${height}!${outfile}
sedによる行の取り扱い
filenameの8行目を削除
sed-i'8d'${filename}
filenameの1行目にTEXT labelを追加(スペースがある場合は、"
で囲む)
cat${filename} | sed-e"1iTEXT label">${outfile}
awkによる列の取り扱い
filenameの1列目が2だったときに2列目の値を返す
awk'{if($1==2){print $2}}'${filename}
filenameの1列目がstrだったときに2列目の値を返す
awk-va="${str}"'{if($1==a){print $2}}'${filename}
filenameの1列目が2だったときにn列目の値を返す
loopの中などでつかう
awk-vn=${loopno}'{if($1==2){print $n}}'${filename}
返した値を他の変数に読ませたいときは、
result=`awk'{if($1==2){print $2}}'${filename}`
filenameの2行目までをoutfileへ出力
awk'NR<=2'${filename}>${outfile}
filenameの2行目から5行目をoutfileへ出力
awk'NR==2,NR==5'${filename}>${outfile}
filenameの末尾の行だけをとりだす
awk'{print $NF}'${filename}>${outfile}
出力結果の桁を指定
awk'{printf "書式\n", $NF}'${filename}>${outfile}
書式制御文字一覧
演算子 | 意味 |
---|---|
%d | 十進整数、%i も使用可 |
%e | 指数形式、%E の場合Eが大文字で出力される |
%f | 小数点を使用した形式、桁数は%4.3f のように指定する |
%g | %f か%e で短くなる方、%G の場合%E 同様Eを大文字で出力 |
%o | 符合なしの八進数 |
%x | 符合なしの十六進数、'%X'の場合アルファベットを大文字時で出力 |
%c | ASCIIキャラクタ、例えば'65'をいう数値を'A'と出力 |
%s | 文字列 |