yuu_nkjm blog


2010-10-11(Mon) [長年日記]

[Linux][command][bash] サブディレクトリにある全ての(任意の範囲の)shファイルを起動する

execというディレクトリのサブディレクトリにシェルスクリプトが複数あり,それを起動したい.

ディレクトリ構成
exec/000/simulation.sh
exec/001/simulation.sh
…
exec/010/simulation.sh

全てのshを起動

find exec/ -print|grep sh|sort

上記のコマンドを叩くと,スクリプトの一覧が獲得できる.このコマンドの実行結果を変数xに格納し,forループで回しながら,各スクリプトをevalで評価する.

#!/bin/bash
x=`find exec/ -print|grep "sh"|sort`
for i in $x
  do
    `chmod +x $x`
    eval $i
  done

指定した範囲のshを起動

複数台のPCで実行をすることを考えると範囲指定が出来たほうが便利だと言うことで,別バージョンも作った.FIRSTとLASTの値を決め打ちではなく,lsやfindを使って決定したいが,ひとまずはいいや.

#!/bin/bash
 
FIRST=$1
INCR=$2
LAST=$3
 
if [ ! -n "$2" ]
then
    echo -n "Input FIRST [def val = 0]: "
    read FIRST
    echo -n "Input INCR [def val = 1]: "
    read INCR
    echo -n "Input LAST [def val = 200]: "
    read LAST
fi
 
if [ ! -n "$FIRST" ]
then
    FIRST=0
fi
 
if [ ! -n "$INCR" ]
then
    INCR=1
fi
 
if [ ! -n "$LAST" ]
then
    LAST=200
fi
 
for i in `seq -f "%03g" $FIRST $INCR $LAST`
do
    x=`find settings/exec/$i -print|grep "sh"|sort`
    if [ ! -n "$x" ]
    then
        break
    fi
    `chmod +x $x`
    eval $x
done

起動例

[usr@hoge ~/workspace]$ ./execSimulations.sh 5 1 7
settings/exec/005/simulation.sh
settings/exec/006/simulation.sh
settings/exec/007/simulation.sh
[usr@hoge ~/workspace]$ ./execSimulations.sh
Input FIRST [def val = 0]: 3
Input INCR [def val = 1]: -1
Input LAST [def val = 200]: 0
settings/exec/003/simulation.sh
settings/exec/002/simulation.sh
settings/exec/001/simulation.sh
settings/exec/000/simulation.sh

それにしても,Windowsでもbash欲しい….win-bashってどうなんやろうか.NYACUS(今はNYAOSなのか)ってWindows上でのシェル拡張を使っているけど,乗り換えてみようかな.

本日のリンク元
その他のリンク元
検索

トップ «前の日記(2010-10-10(Sun)) 最新 次の日記(2010-10-13(Wed))» 月表示 編集 設定
2006|01|06|12|
2007|06|09|
2008|01|03|04|06|07|08|09|10|12|
2009|01|02|05|06|07|08|10|11|12|
2010|03|04|05|06|07|08|09|10|11|
2011|01|02|03|04|05|06|07|08|09|11|12|
2012|01|02|04|06|07|08|10|11|12|
2013|01|02|03|07|08|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|
2015|01|02|07|11|12|
2016|01|03|05|07|08|09|