Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2869

シェルスクリプト覚え書き

$
0
0

今日の日付を取得

書式指定ができる(以下の場合は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文の条件判定

演算子意味
-eqequal
-nenot equal
-ltless than
-leless than or equal
-gtgreater than
-gegreater than or equal
-echeck existance
-dcheck directory
-fcheck file
-nnot 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'の場合アルファベットを大文字時で出力
%cASCIIキャラクタ、例えば'65'をいう数値を'A'と出力
%s文字列

関連ページ


Viewing all articles
Browse latest Browse all 2869

Trending Articles