ablog

不器用で落着きのない技術者のメモ

bash

シェルスクリプトのエラー処理を見やすく書く

bash でシェルスクリプトを書いていて、エラー処理をif文を使って command ... if [ $? -ne 0 ] then echo ... exit 1 fi みたいに書くと、コードが見づらいのでなんとかならないかと思っていたら、 command ... || { echo ... ; exit 1 ; } こういう風に書…

bash で文字列比較を行う時に変数をダブルクオートで囲う理由

if [ "$var1" = 'test' ]; then echo 'string is SAME' else echo 'string is NOT same' fi このとき、変数参照をすべて "〜" で囲むのがコツである。これは変数が未定義のために展開されないと、test コマンドに対する引数が不足してしまうからである。注意…

1行追記するだけでスクリプトの標準出力と標準エラーをファイルに出力する

以下の1行を追記すれば良い。 exec > ファイル名 2>&1 例 hoge.sh #!/bin/bash ls a hoge2.sh #!/bin/bash exec > hoge2.log 2>&1 ls a 実行結果 $ ./hoge.sh ls: a: No such file or directory $ ./hoge2.sh $ cat hoge2.log ls: a: No such file or direct…

bashで指定回数ループする

bash で指定回数ループするのって、こうするのか。 コード for i in {1..10} do echo $i done 実行結果 1 2 3 4 5 6 7 8 9 10 参考 bashで指定回数ループして綺麗な連番ファイル名を作る/sprintf - それマグで!

データを増幅したときの Perl ワンライナー

ほんとうにただのメモ。 bash + perl ワンライナーでデータファイルを 10 倍に増幅した。 $ cp -p data.cgi data_org.cgi $ wc -l data.cgi 20763 data.cgi $ cp data.cgi data_new.cgi $ for i in {1..9} do export n=`perl -lanF',' -e '$a=$F[0] if $a<$F…

bash で前ゼロ埋めする

$ printf "%04d-%02d-%02d" 2008 8 4 2008-08-04 bash でも printf 使えるのか。 [参考]bashクックブック作者: Carl Albing,JP Vossen,Cameron Newham,株式会社クイープ出版社/メーカー: オライリージャパン発売日: 2008/09/26メディア: 大型本購入: 8人 ク…

圧縮されたdumpを解凍してimportして削除するシェルスクリプト

Solaris10 上でちょっと使ったシェルスクリプトをメモ。 カレントトディレクトリ以下の *dmp.bz2 をサイズの小さい順に解凍・Orace に import・削除します。 #!/usr/bin/bash # *.dmp.bz2 をサイズの小さい順に処理していく。 ls -s *.dmp.bz2|sort -n|perl …

bashのif文でAND(論理積演算子)やOR(論理和演算子)を使う

AND(論理積演算子) if [ -f a.txt -a -f b.txt ] OR(論理和演算子) if [ -f a.txt -o -f b.txt ] [参考] bashクックブック P.128 レシピ 6.4 複数の属性の評価

元のファイルを残してgzipで圧縮する

$ ls /home/oracle/from/*.* | while read LINE do gzip -c $LINE > /home/oracle/to/$LINE.gz done う〜ん、もっとスマートにできると思うんだけどな。。。

bash で無限ループ

while : do ... done 「:」はヌルコマンドという組み込みコマンドらしい。 シェルの組み込みコマンドであるコロンひとつのヌルコマンド(:)は常に戻り値が0の値を返します。このコマンドは無限ループを意図的に作る場合などに使用されます。 ヌルコマンドによ…

Oracleが使っている共有メモリサイズを調べる

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ) P.201 にのっている共有メモリサイズを調べる Perl スクリプトにヒントを得て、Oracle が使っている共有メモリサイズを調べるスク…

grep でハイフン"-"を含む文字列を検索する

$ grep -c '- java.sql.SQLException' * grep: invalid option -- Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more information.と怒られるので、"\"でエスケープしたら成功した。 $ grep -c '\- java.sql.SQLException' * default.l…

grep でファイル毎にマッチした件数を表示する

$ grep -c 'java.sql.SQLException' * default.log:0 default.log.1:0 default.log.2:23 default.log.3:55 ...

bash でディレクトリがない場合作成する

if [ ! -d log ] then mkdir log fi

コメント行と空行を削除する

$ /usr/xpg4/bin/grep -v -e "^[ \t]*#" -e "^$" standard10201.rsp Solaris 10 で grep -e を使いたい場合、/usr/xpg4/bin/grep を使わないといけないみたい。