この文書の現在のバージョンと選択したバージョンの差分を表示します。
Both sides previous revision Previous revision Next revision | Previous revision | ||
shell_script [2009/08/16 00:09] 10.232.95.26 |
shell_script [2011/08/24 22:41] isakari |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | シェルはたまにしか使わないので、すぐ忘れてしまう。ので、ここにメモすることにする。スクリプトと言うよりも、Unixコマンドの使い方のようなものも、ついでにここにメモすることにする。 | + | シェルはたまにしか使わないので、すぐ忘れてしまう。ので、ここにメモすることにする。[Unix|Linux]コマンドの使い方は[[linux_command]]へ. |
+ | |||
+ | ====== スクリプトを保存する時,自動的に chmod +x を行う ====== | ||
+ | .emacs に以下を記述するとファイルの先頭に#!が含まれているとき、自動的に chmod +x を行ってくれる。 | ||
+ | <code emacs> | ||
+ | (add-hook 'after-save-hook | ||
+ | 'executable-make-buffer-file-executable-if-script-p) | ||
+ | </code> | ||
+ | |||
+ | |||
====== シェルからgnuplotで図を作成(epsやpsなどにする) ===== | ====== シェルからgnuplotで図を作成(epsやpsなどにする) ===== | ||
たくさん図を作るときなどに。 | たくさん図を作るときなどに。 | ||
ライン 12: | ライン 22: | ||
====== シェルからgnuplotで図を作成(Xで表示) ===== | ====== シェルからgnuplotで図を作成(Xで表示) ===== | ||
- | ./do.shとやるだけで、数値解と解析解を比べてくれる。 | + | =====決定版?===== |
- | -persistとやると、Xの画面が勝手に消えなくなる。 | + | 次のようにやると、./do.shとやると数値解と解析解を比べてくれる。 |
- | #!/thin/local/bin/gnuplotの部分は各自のgnuplotが置いてある場所を指定すること。 | + | |
<code bash> | <code bash> | ||
- | which gnuplot | + | #do.shの中身 |
+ | #!/bin/sh | ||
+ | make && ./a.out | ||
+ | gnuplot -persist <<EOF | ||
+ | plot 'suuchikai.dat','kaisekikai.dat' | ||
+ | EOF | ||
</code> | </code> | ||
- | とやって出てきたものを書き込めばよろしい。 | + | |
- | バグ取り時に大活躍(のはず)。 | + | =====↑に到達するまでのやりとり===== |
- | もっとsmartなやり方があるのかもしれない。FIXME | + | 以下のdo.shとplot.gpを用意すると、./do.shとやるだけで、数値解と解析解を比べてくれる。 |
<code bash> | <code bash> | ||
ライン 31: | ライン 45: | ||
#!/thin/local/bin/gnuplot -persist | #!/thin/local/bin/gnuplot -persist | ||
plot 'suuchikai.dat','kaisekikai.dat' | plot 'suuchikai.dat','kaisekikai.dat' | ||
+ | </code> | ||
+ | |||
+ | -persistとやると、Xの画面が勝手に消えなくなる。 | ||
+ | #!/thin/local/bin/gnuplotの部分は各自のgnuplotが置いてある場所を指定すること。 | ||
+ | <code bash> | ||
+ | which gnuplot | ||
+ | </code> | ||
+ | とやって出てきたものを書き込めばよろしい。 | ||
+ | バグ取り時に大活躍(のはず)。 | ||
+ | ただし、スクリプトが二つのファイルになってしまう。 | ||
+ | もっとsmartなやり方があるのかもしれない。FIXME | ||
+ | |||
+ | |||
+ | gnuplotのパスに依存しないやり方はこんな感じかしら. | ||
+ | <code bash> | ||
+ | #!/bin/sh | ||
+ | make && ./a.out | ||
+ | gnuplot -persist plot.gp | ||
</code> | </code> | ||
ライン 73: | ライン 105: | ||
</code> | </code> | ||
e(x)はexp(1)のこと. | e(x)はexp(1)のこと. | ||
+ | |||
+ | ====== ファイルから何かを読み取って変数に代入 ====== | ||
+ | hoge.datが一行からなる情報を持っているとき。 | ||
+ | <code bash> | ||
+ | a=`cat hoge.dat` | ||
+ | </code> | ||
+ | |||
+ | 複数行からなるpiyo.datから一行ごとに読み取りたければreadを使う。 | ||
+ | <code> | ||
+ | cat piyo.dat | while read i | ||
+ | do | ||
+ | a=`echo $i` | ||
+ | (aを使ってなにか作業) | ||
+ | done | ||
+ | </code> | ||
====== data file から必要な列だけを取り出す ====== | ====== data file から必要な列だけを取り出す ====== | ||
ライン 111: | ライン 158: | ||
a=`expr $a + 1` | a=`expr $a + 1` | ||
done | done | ||
+ | </code> | ||
+ | |||
+ | ====== 変数を適当に変えてケーススタディー ====== | ||
+ | 周波数omegaを適当に振って計算した例。 | ||
+ | <code bash> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | ====== 変数を端末から読み込みたい ====== | ||
+ | readを使う。 | ||
+ | <code bash> | ||
+ | echo "what's your name" | ||
+ | read name | ||
+ | echo your name is $name. | ||
+ | </code> | ||
+ | |||
+ | ====== 3分待ってからプログラムを実行 ====== | ||
+ | sleepを使う。 | ||
+ | <code bash> | ||
+ | sleep 180 && ./a.out | ||
</code> | </code> |