この文書の現在のバージョンと選択したバージョンの差分を表示します。
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
shell_script [2009/08/16 00:10] 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> | ||
| - | とやって出てきたものを書き込めばよろしい。 | + | |
| - | バグ取り時に大活躍(のはず)。 | + | =====↑に到達するまでのやりとり===== |
| - | ただし、スクリプトが二つのファイルになってしまう。 | + | 以下のdo.shとplot.gpを用意すると、./do.shとやるだけで、数値解と解析解を比べてくれる。 |
| - | もっとsmartなやり方があるのかもしれない。FIXME | + | |
| <code bash> | <code bash> | ||
| ライン 32: | ライン 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> | ||
| ライン 74: | ライン 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 から必要な列だけを取り出す ====== | ||
| ライン 112: | ライン 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> | ||