※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

シェルプログラムのTips&サンプルプログラム

拡張子の一括変更

#!/bin/sh

while [ -n $1 ]; do #第一引数$1がゼロでない(-n)なら実行
 ${1/pnm/png} #pnmをpngで置換する
 shift #引数をずらす
done #終了

for old in *.pnm; do new=`echo $old | sed "s/pnm/png/g"`; mv $old $new; done

bashでログインしても.bashrcが反映されない

.bash_profileで設定する必要がある。(詳細はbashのマニュアル)
具体的には、.bash_profile内に
 . ~/.bashrc
を(もしくは同様の記述、source .bashrcなどを)書く。

シェル中で数値を扱いたい

普通に宣言するだけではシェルスクリプトは全て文字として判断する。例えば、
$ a=1
$ b=$a+1
$ echo $b
1+1
みたいになる。これを解決するためには、declare -iで宣言してやる必要がある。参照ページ
$ declare -i a=1 b=0
$ b=$a+1
$ echo $b
2

整数・小数演算

もっとも有名なのは expr で、これは引数に演算式を与えると演算してくれる。
$ expr 1 + 1
2
ただし、expr は、演算子の前後にスペースを入れないとエラーになる(スペース区切りで構文解析をしているため)。
$ expr 1+1
1+1
使える演算は、四則演算+剰余と、その他文字列とか論理和・積など。参照ページ

小数演算をしたい場合は bc を使う。ただし、こっちは引数ではとってくれないため、 echo を使って流し込む必要がある。
$ echo "1.1 + 2.2" | bc -l
3.3


日付の自動表示

これは結構色んなとこでも書いているが、実際使ったから記述。
シェルスクリプト内で日付を入れたものを作りたいときはdateコマンドを利用する。
例えば、
mkdir `date +%Y%m%d`
とかすると今日の年月日のフォルダを作ることができる。
よく使う実験用シェルスクリプトとかに入れておくと勝手に日付管理してくれて便利。

複数文字列のor指定

結構記述がなかったのでメモ。
例えば、 file_a.txt file_b.txt の両方を指定したい場合は
ls file_[ab].txt
みたいに書く。では、file_one.txt file_two.txtの両方を指定する場合はどうするか。
ls file_{one,two}.txt
みたいに{}を使って書く。
ただし、[]は好意的に(あれば含めるし、なければ無視)とってくれるが、{}は両方必ず指定される。つまり、上の例では file_b.txt がなくてもエラーはでないが、 file_two.txt がないと
ls: file_two.txt: そのようなファイルやディレクトリはありません
と怒られる。

第n行を表示する

ファイルの第N行目だけ、もしくはM-N行目を表示したいってとき、ありますよね?
sed -ne Np hoge
で、N行目だけ出る。-nはpで出力しなければ出力しないという引数で、sedはN行目だけマッチしてpで出力する。他の行は無視される。

同様に、
sed -ne M,Np hoge
でM-N行目が出力される。

連番を表示(seq)

seq M N
でMからNまでが連番で出力される。

1-10みたいなときに桁数を揃えたい場合は
seq -w 1 10
にすると 01 02 03 04 05 06 07 08 09 10 となる。

また、
seq -f %03g 1 5
みたいにすると 001 002 003 004 005 みたいに形式を揃えることができる。デフォルトは %g を使用。基本はprintfと同じ。
|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|