シェルはたまにしか使わないので、すぐ忘れてしまう。ので、ここにメモすることにする。[Unix|Linux]コマンドの使い方はlinux_commandへ.
.emacs に以下を記述するとファイルの先頭に#!が含まれているとき、自動的に chmod +x を行ってくれる。
(add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p)
たくさん図を作るときなどに。
make && ./a.out gnuplot <<EOF set term post eps set out "hoge.eps" plot 'fort.88' EOF
次のようにやると、./do.shとやると数値解と解析解を比べてくれる。
#do.shの中身 #!/bin/sh make && ./a.out gnuplot -persist <<EOF plot 'suuchikai.dat','kaisekikai.dat' EOF
以下のdo.shとplot.gpを用意すると、./do.shとやるだけで、数値解と解析解を比べてくれる。
#do.shの中身 make && ./a.out ./plot.gp
#plot.gpの中身 #!/thin/local/bin/gnuplot -persist plot 'suuchikai.dat','kaisekikai.dat'
-persistとやると、Xの画面が勝手に消えなくなる。 #!/thin/local/bin/gnuplotの部分は各自のgnuplotが置いてある場所を指定すること。
which gnuplot
とやって出てきたものを書き込めばよろしい。 バグ取り時に大活躍(のはず)。 ただし、スクリプトが二つのファイルになってしまう。 もっとsmartなやり方があるのかもしれない。
gnuplotのパスに依存しないやり方はこんな感じかしら.
#!/bin/sh make && ./a.out gnuplot -persist plot.gp
echo 5 | ./a.out
echo "5\n6" | ./a.out
あるいは
./a.out << EOF 5 6 EOF
inputの中のすべてのappleをorangeに置換して、outputに放り込む。
sed -e 's/apple/orange/g' input > output
bcと、scaleを使う。scaleには欲しい桁数を入力する。 `は'ではないので注意が必要.
sq3=`echo "scale=17; sqrt(3)" |bc` a=`echo "scale=17; $sq3/10.0" |bc`
bcについて補足. -lオプションで20桁まで計算+関数の使用が可能になる.
echo "e(1)" | bc -l
e(x)はexp(1)のこと.
hoge.datが一行からなる情報を持っているとき。
a=`cat hoge.dat`
複数行からなるpiyo.datから一行ごとに読み取りたければreadを使う。
cat piyo.dat | while read i do a=`echo $i` (aを使ってなにか作業) done
awkを使う。n列目とm列目が欲しいなら、
awk '{print $n,$m}' hoge.dat
do i=1,100 di=1.d-1*dble(i) write(*,*) di 何か作業 enddo
のようなことをやりたければ、
i=1 while [ `echo "$i <= 10" |bc` -eq 1 ] do echo $i 何かコマンド i=`echo "$i + 0.1" |bc` done
とすればよい。
aを0から99まで動かすとき、
a=0 while test $a -ne 100 do echo $a 何か実行 a=`expr $a + 1` done
周波数omegaを適当に振って計算した例。
make for omega in 3.125 3.135 3.145 3.155 6.265 6.275 6.285 6.295 do rm -fr output_linc_beta0_w${omega} echo ${omega} | ./a.out cp -r output output_linc_beta0_w${omega} done
readを使う。
echo "what's your name" read name echo your name is $name.
sleepを使う。
sleep 180 && ./a.out