Bash でスクリプト実行時に必ずそのファイルの場所に移動させたい

そんなときは下記を仕込んでおく。 #!/bin/bash BASEDIR=${0%/*} cd $BASEDIR

2010年6月29日 · Toshimitsu Takahashi

ターミナルで現在時刻を表示し続ける方法

コマンドラインで実行するスクリプトで、同じ行に表示し続けたり上書きして表示するものがある。 例えばパッケージのインストールになどで出る進捗表示などである。同じような出力をするにはエスケープシーケンスを知っておく必要がある。ASCII コードの制御文字と呼ばれるものだ。CR, LF といった改行コードに関する以外にも様々なものがある。 echo hogehoge とやると、hogehogeが出力されて次の行にプロンプトが移る。 $ echo hogehoge hogehoge $ echo -e “hogehoge\c”; echo 123 と実行すると \c が指定されると行末での改行が行われなくなる*1ので、次のように続けて表示される。 $ echo -e “hogehoge\c”; echo 123 hogehoge123 $ \r はキャリッジリターン(復帰)である。これを使うとプロンプトの先頭にカーソルを動かしたことになる。 そんなわけでいきなりまとめだが同じ位置に現在時刻をたんたんと表示するスクリプトは下記のように書ける。 #!/bin/sh while true do time=`date +%H:%M:%S` echo -e “$time\c” sleep 1 echo -e “\r\c” done exit 0 *1:これは echo -n オプションを使うことでも可能である。

2009年3月19日 · Toshimitsu Takahashi

Solaris で暴走プロセスを KILL するウォッチャスクリプトを作るには

CPU リソースを食いつぶすプロセスがあったら、KILL する監視用スクリプトを書いてみる。 Linux だと top が有名だが、Solaris では標準ではない。prstat を使う。prstat を単に実行して標準出力するには $ prstat -c 1 1 とすればよい。後はターゲットプロセス名で grep して awk で cpu 使用率を取り出して合計値が閾値を超えたら、プロセスを KILL -KILL するようにする。 引数: 対象プロセス名(grep してるだけなので不十分) 暴走したとみなすしきい値 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/bin/bash target=$1 threshold=$2 exp=0 for u in `prstat -c 1 1 | grep $target | awk '{print $9}' | sed -e "s/%$//"` do exp="${exp}+${u}" done cpu=`echo "s=${exp}; s/1" | bc` if \[ $cpu -lt $threshold \] then echo "no driving $target. (cpu usage: $cpu%)" exit 0 fi ps -ef | grep $target | awk '{print $2}' | xargs kill -KILL echo "killed driving $target. (cpu usage: $cpu%)" ※bc で実数の計算をしているが、scale=0; としても小数値が帰ってしまうので s/1 とした。

2008年3月20日 · Toshimitsu Takahashi

bash でスクリプト名を取得するには

シェルでは $0 で実行したスクリプトファイルのパスが取れる。ここでスクリプト名だけを切り出したときはどうすればよいか。basename というコマンドを使うと切り出せる。また指定したサフィックスを取り除くことができる。 bash だとパターンマッチによる切り出しができる。 #!/bin/bash base=${0##*/} echo $base echo basename $0 echo ${base%.sh} echo basename $0 .sh を実行すると、 $ /home/toshi/shell/hoge.sh hoge.sh hoge.sh hoge hoge $ ./hoge.sh hoge.sh hoge.sh hoge hoge となる。 ※スクリプト名を切り出して何に使うのか。 ⇒例えば view と vi のように実行名によって動作を変えるときなんかに使います。

2008年1月23日 · Toshimitsu Takahashi

bash で四則演算

sh で四則演算はサポートされていないので、expr を使う。bash は次のように書ける。 #!/bin/bash add=$((1 + 2)) sub=$((1 - 2)) multi=$((5 * 2)) div=$((5 / 2)) mod=$((13 % 2)) echo $add echo $sub echo $multi echo $div echo $mod を実行すると、 3 -1 10 2 1 となる。

2007年12月21日 · Toshimitsu Takahashi