シェルスクリプト

改行コードはUNIX(LF)にする
拡張子は.sh
ファイルの先頭に#!/bin/shを書く
コメントは#で行末まで

  • 実行
./sample.sh
権限が必要と出た時は sh ./sample.sh

  • かんたん
処理を並べる
./a.exe 1
./a.exe 2
./a.exe 3

  • 変数
代入 a=1
参照 b=$a

  • 表示
文字列 echo "hello world"
値 echo "a=$a"

  • 計算
足し算 expr 1 + 1
引き算 expr 1 - 1
掛け算 expr 1 \* 1
割り算 expr 1 \/ 1
注意:値と演算子の間に半角スペースが必要
   掛け算、割り算は小数切り捨て
   値に代入するときは`(shift+@)で囲む a=`expr 1 + 1`

  • for文
for i in $(seq 0 10)
do
echo "i=$i"
done

  • まとめて計算するときに便利な知識

例えばこんな並列計算をする
for i in `seq 1 10`
do
poisson.exe $i &
done

&がついてるのはバックグランドジョブにして同時に計算させてる(マルチコアCPUだから)
んで計算中にゲームがしたくなったときは、これらを一時停止させたい

ps

って打つとプロセス一覧が出る。実はさっきのforで回したプロセスは全部同じPGIDを持っている
だからこんなことができる

一時停止
kill -stop `ps | grep PGID | cut -d " " -f 6`
再開
kill -cont `ps | grep PGID | cut -d " " -f 5`
終了
kill `ps | grep PGID | cut -d " " -f 6`

親プロセスと子プロセスを管理するのは面倒だからこれでいい。
(コマンドはcygwin用)

  • テキスト回転
gnuplotでplotするときにデータの行と列を入れ替えたい
元データの改行コードはLF(UNIX)にしておく

やり方はcutで1列ずつ抜き出して
paste -s で行にして、結合させる

#!/bin/sh
in=$1
n=$2
out=$3
rm -f $out
for i in `seq 1 $n`
do
cut -f $i $in | paste -s >> $out
done

これで動く。nは元データの列数

タグ:

+ タグ編集
  • タグ:
最終更新:2011年12月31日 19:39
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。