PHITS Multi-Purpose Particle and Heavy Ion Transport code System 特別実習 スクリプト言語を用いたPHITSの連続実行 2015年2月改訂 title 1 本実習の目標 スクリプト言語の基本的な使用方法を習得し、複数 回のPHITSの実行を自動的にできるようにする。 @echo off SET PHITSEXE=“C:\phits\bin\phits274_win.exe“ for /l %%i in (1, 1, 3) do ( %PHITSEXE% < lec0%%i.inp copy phits.out phits%%i.out ) pause exit Lec01.inp, lec02.inp, lec03.inpを 連続で実行するスクリプト Purpose 2 スクリプト言語とは ソフトウェアの動作内容を記述し制御するための、 簡易的なプログラミング言語 • コマンドプロンプト(Windowsの場合)で実行で きるコマンドを書き並べたファイルを作ることで、 様々なソフトウェアの動作を自動的に実行する ことができる • テキストエディタで編集でき、拡張子がbatであ れば使用可能(Windowsの場合) • ファイルのコピーや移動、ファイルの内容の読 み込みや書き出しが可能 • あるソフトウェアを実行するコマンドを複数書く ことでその回数分の実行が可能 Script 3 実習内容 1. Windows版 2. Mac版 Table of contents 4 課題1 “Hello PHITS world”と出力されるスクリプトファ イルを作成してみましょう • テキストエディタでtest.batを開く • Echoコマンドを使う Echo *** と書くことで***の部分が書き出される • test.batをダブルクリックして実行 おまじない1 不必要な情報が 出力されなくなる おまじない2 スクリプト終了 時に一旦停止 Test-1.bat @echo off ここにコマンドを書く pause exit Script 5 課題1の答え合わせ “Hello PHITS world”と出力されるスクリプトファ イルを作成してみましょう Test-1.bat @echo off echo Hello PHITS world pause exit 実行すると、 Script 6 課題2 “Hello PHITS world”を新規ファイルfile.txtに書き 出すスクリプトファイルを作成してみましょう • テキストエディタでtest-2.batを開く • Echoコマンドを使う Echo *** > file.txt と>(リダイレクト)を使って書くことで***の部分がfile.txt に書き出される • Test-2.batをダブルクリックして実行 Test-2.bat >(リダイレクト)を使う @echo off echo Hello PHITS world pause exit Script 7 課題2の答え合わせ “Hello PHITS world”を新規ファイルfile.txtに書き 出すスクリプトファイルを作成してみましょう Test-2.bat @echo off echo Hello PHITS world > file.txt pause exit 実行すると、file.txtというファイルが作られる file.txt Hello PHITS world Script 8 課題3 変数に“Hello PHITS world”を代入してfile.txtに 書き出してみましょう • Setコマンドを使う Set aaa= *** と書くことで*** (文字列)の部分が変数aaaに代入される • 書き出しはechoコマンドを使う 変数を使う場合は%aaa%のように%記号で囲む Test-3.bat 変数aaaに代入しましょう @echo off Set echo Hello PHITS world > file.txt pause exit 変数aaaを書き出しましょう Script 9 課題3の答え合わせ 変数に“Hello PHITS world”を代入してfile.txtに 書き出してみましょう Test-3.bat =の前後に空白を入れない ように注意しましょう @echo off set aaa=Hello PHITS world echo %aaa% > file.txt pause exit 実行すると、file.txtの内容は file.txt Hello PHITS world Script 10 課題4 数字を代入した変数を使って定義したfile2.txtに “Hello PHITS world”を書き出してみましょう • Setコマンドを使う Set /a iii= *** と書くことで***(数字)の部分が変数iiiに数値として代入される Set /a iii=iii+1 と書くことで演算が可能 • 文字列の一部として変数を使うことができる file%iii%.txt のように%記号で囲んだものを差し込む Test-4.bat @echo off 1が入っている変数iiiを 2にするには? set aaa=Hello PHITS world set /a iii=1 set /a echo %aaa% > file.txt File2.txtとなるように 書きかえましょう pause exit Script 11 課題4の答え合わせ 数字を代入した変数を使って定義したfile2.txtに “Hello PHITS world”を書き出してみましょう Test-4.bat @echo off set aaa=Hello PHITS world set /a iii=1 set /a iii=iii+1 echo %aaa% > file%iii%.txt pause exit 実行すると、file2.txtが新しく作成され file2.txt Hello PHITS world Script 12 課題5 File.txtの内容を読み込んでfile2.txtに追記しましょう • forコマンドを使う for /f "tokens=1-3" %%a in (file.txt) do ( コマンド ) と書くことでfile.txtから読み込んだ情報を使って括弧()で 囲まれたコマンドを実行する • 読み込みは1行ずつ行い、読み込んだ情報は変 数%%a, %%b, %%cに代入される • “tokens=1-3“をオプションとして書くことにより、空白を 区切りとして左から3つの情報が変数として代入される • Echoコマンドを使う Echo %%a >> file2.txt と書くことで変数%%aの内容がfile2.txtに追記される (読み込んだ変数は%で挟む必要はない) Script 13 課題5 File.txtの内容を読み込んでfile2.txtに追記しましょう Test-5.bat @echo off set /a iii=2 for /f "tokens=1-3" %%a in (file.txt) do ( 読み込んだ“Hello PHITS world” がfile2.txtに追記されるように しましょう ) pause exit Script 14 課題5の答え合わせ File.txtの内容を読み込んでfile2.txtに追記しましょう Test-5.bat @echo off set /a iii=2 for /f "tokens=1-3" %%a in (file.txt) do ( echo %%a %%b %%c >> file%iii%.txt ) 変数%%aに”Hello” %%bに” PHITS” %%cに”world” が代入されているので、 これらを並べて文章を作成する pause exit 実行すると、file2.txtの内容は file2.txt Hello PHITS world Hello PHITS world Script 15 課題6 File.txtをコピーしてfile1.txt, file2.txt, file3.txt を作成しましょう • copyコマンドを使う Copy file.txt file1.txt と書くことでfile.txtの内容がfile1.txtにコピーされる • forコマンドを使う for /l %%i in (1, 1, 3) do ( コマンド ) と書くことで、変数%%iの数字を1→2→3と変えな がら括弧()で囲まれたコマンドを実行する Test-6.bat @echo off for /l %%i in (1, 1, 3) do ( 変数%%iを使って、File.txtを File%%i.txtにコピーしましょう ) pause exit Script 16 課題6の答え合わせ File.txtをコピーしてfile1.txt, file2.txt, file3.txt を作成しましょう Test-6.bat @echo off for /l %%i in (1, 1, 3) do ( copy file.txt file%%i.txt ) pause exit 実行すると、file1.txt, file2.txt, file3.txtが作成され File1(2,3).txt Hello PHITS world Script 17 課題7 If文を使って、file2.txtにだけfile.txtの内容を コピーするようなスクリプトを作成しましょう • ifコマンドを使う If %%i == *** ( コマンド ) と書くことで変数%%iの数字が***の場合のみ 括弧()で囲まれたコマンドを実行する Test-7.bat @echo off for /l %%i in (1, 1, 3) do ( copy file.txt file%%i.txt ) Ifコマンドを使って、 変数%%iが2の場合 のみコピーするよう にしましょう pause exit Script 18 課題7の答え合わせ If文を使って、file2.txtにだけfile.txtの内容を コピーするようなスクリプトを作成しましょう Test-7.bat @echo off for /l %%i in (1, 1, 3) do ( if %%i == 2 ( copy file.txt file%%i.txt ) ) pause exit 実行すると、file2.txtのみ作成される Script 19 課題8 PHITSを実行するスクリプトを作成し、自動で lec01.inpとlec02.inp, lec03.inpを計算してみましょう • PHITSの実行コマンドを定義する SET PHITSEXE=“C:\phits\bin\phits274_win.exe“ と書くことでPHITSの実行コマンドがセットされる • PHITSの実行形式は < の後にインプットファイルを書く %PHITSEXE% < lec01.inp と書くことでlec01.inpを入力ファイルとした計算が実行 される Test-8.bat @echo off SET PHITSEXE=“C:\phits\bin\phits274_win.exe“ for /l %%i in (1, 1, 3) do ( ) pause exit Script • 変数%%iを使っ て、3つのイン プットファイルが 動作するようにし ましょう • Phits.outに番号 を付けてコピーし ましょう 20 課題8の答え合わせ PHITSを実行するスクリプトを作成し、自動で lec01.inpとlec02.inp, lec03.inpを計算してみましょう Test-8.bat @echo off SET PHITSEXE=“C:\phits\bin\phits274_win.exe“ for /l %%i in (1, 1, 3) do ( %PHITSEXE% < lec0%%i.inp copy phits.out phits%%i.out ) pause exit 実行すると、phits1.out, phits2.out, phits3.outが作成される Script 21 実習内容 1. Windows版 2. Mac版 Table of contents 22 課題1 “Hello PHITS world”と出力されるスクリプトファ イルを作成してみましょう • • • テキストエディタでTest_mac-1.command を開く Echoコマンドを使う – Echo "***" – と書くことでダブルクォーテーションで囲まれた***の部分 が書き出される Test_mac-1.commandをダブルクリックして実行 おまじない1 Test_mac-1.command Shift+@ #!/bin/sh cd `dirname $0` おまじない2 スクリプト終了 時に一旦停止 ここにコマンドを書く echo "- push ENTER key to end -" read WAIT exit Script 23 課題1の答え合わせ “Hello PHITS world”と出力されるスクリプトファ イルを作成してみましょう Test_mac-1.command #!/bin/sh cd `dirname $0` Echo " Hello PHITS world" echo "- push ENTER key to end -" read WAIT exit 実行して表示されれば成功! Script 24 課題2 “Hello PHITS world”を新規ファイルfile.txtに書き 出すスクリプトファイルを作成してみましょう • テキストエディタでTest_mac-2.commandを開く • Echoコマンドを使う Echo *** > file.txt と>(リダイレクト)を使って書くことで***の部分がfile.txtに 書き出される • est_mac-2.commandをダブルクリックして実行 Test_mac-2.command >(リダイレクト)を使う #!/bin/sh cd `dirname $0` Echo " Hello PHITS world" echo "- push ENTER key to end -" read WAIT exit Script 25 課題2の答え合わせ “Hello PHITS world”を新規ファイルfile.txtに書き 出すスクリプトファイルを作成してみましょう Test_mac-2.command #!/bin/sh cd `dirname $0` Echo " Hello PHITS world“ > file.txt echo "- push ENTER key to end -" read WAIT exit 実行すると、file.txtというファイルが作られる file.txt Hello PHITS world Script 26 課題3 変数に“Hello PHITS world”を代入してfile.txtに 書き出してみましょう • 代入式を使う aaa= "***" と書くことで*** (文字列)の部分が変数aaaに代入される • 書き出しはechoコマンドを使う 変数を使う場合は${aaa}のように$記号を先頭につける ($aaaのように{}を省略できる場合もある) Test_mac-3.command 変数aaaに代入しましょう #!/bin/sh cd `dirname $0` "Hello PHITS world " echo > file.txt echo "- push ENTER key to end -" read WAIT exit Script 変数aaaを書き出しましょう 27 課題3の答え合わせ 変数に“Hello PHITS world”を代入してfile.txtに 書き出してみましょう Test_mac-3.command =の前後に空白を入れない ように注意しましょう #!/bin/sh cd `dirname $0` aaa="Hello PHITS world " echo $aaa > file.txt echo "- push ENTER key to end -" read WAIT exit 実行すると、file.txtの内容は file.txt Hello PHITS world Script 28 課題4 数字を代入した変数を使って定義したfile2.txtに “Hello PHITS world”を書き出してみましょう • 数字の演算を行う iii=$(( $*** + 1 )) と書くことで***(文字)の部分が数値として認識して 演算した後、変数iiiに文字として代入される • 文字列の一部として変数を使うことができる File${iii}.txt のように${}記号で囲んだものを差し込む Test_mac-4.command #!/bin/sh cd `dirname $0` 変数iiiに1を代入しましょう iii=iii+1の演算をさせiii=2 としましょう aaa="Hello PHITS world" echo $aaa > file.txt echo "- push ENTER key to end -" read WAIT exit Script File2.txtとなるように 書きかえましょう 29 課題4の答え合わせ 数字を代入した変数を使って定義したfile2.txtに “Hello PHITS world”を書き出してみましょう Test_mac-4.command #!/bin/sh cd `dirname $0` aaa="Hello PHITS world" iii=1 iii=$(( $iii+1 )) echo $aaa > file${iii}.txt echo "- push ENTER key to end -" read WAIT exit file1.txt 実行すると、file2.txtが新しく作成され Hello PHITS world Script 30 課題5 File.txtの内容を読み込んでfile2.txtに追記しましょう • do whileコマンドを使う それと同時に以下を実行 cat file.txt | while read a b c do ファイルを読み込むコマンド コマンド done と書くことでfile.txtから読み込んだ情報を使って括弧do doneで囲まれたコマンドを実行する • 読み込みは1行ずつ行い、読み込んだ情報は変数a, b, cに代入される • 空白を区切りとして左から3つの情報を変数a,b,cに代 入される • Echoコマンドを使う Echo $a >> file2.txt と書くことで変数aの内容がfile2.txtに追記される Script 31 課題5 File.txtの内容を読み込んでfile2.txtに追記しましょう Test_mac-5.command #!/bin/sh cd `dirname $0` iii=2 cat file.txt | while read a b c do 読み込んだ“Hello PHITS world” がfile2.txtに追記されるように しましょう done echo "- push ENTER key to end -" read WAIT exit Script 32 課題5の答え合わせ File.txtの内容を読み込んでfile2.txtに追記しましょう Test_mac-5.command 変数aに”Hello” bに” PHITS” cに”world” が代入されているので、 これらを並べて文章を作成する #!/bin/sh cd `dirname $0` iii=2 cat file.txt | while read a b c do echo $a $b $c >> file${iii}.txt done echo "- push ENTER key to end -" read WAIT exit file2.txt 実行すると、file2.txtの内容は Hello PHITS world Hello PHITS world Script 33 課題6 File.txtをコピーしてfile1.txt, file2.txt, file3.txt を作成しましょう • cpコマンドを使う cp file.txt file1.txt と書くことでfile.txtの内容がfile1.txtにコピーされる • Forコマンドを使う for i in (seq 1 3) do コマンド done と書くことで、変数iの数字を1→2→3と変えながら do doneで囲まれたコマンドを実行する Test_mac-6.command #!/bin/sh cd `dirname $0` for i in $(seq 1 3) do done echo "- push ENTER key to end -" read WAIT exit 変数iを使って、file.txtを file${i}.txtにコピーしましょう Script 34 課題6の答え合わせ File.txtをコピーしてfile1.txt, file2.txt, file3.txt を作成しましょう Test_mac-6.command #!/bin/sh cd `dirname $0` for i in $(seq 1 3) do cp file.txt file${i}.txt done echo "- push ENTER key to end -" read WAIT exit File1(2,3).txt 実行すると、file1.txt, file2.txt, file3.txtが作成され Hello PHITS world Script 35 課題7 If文を使って、file2.txtにだけfile.txtの内容を コピーするようなスクリプトを作成しましょう • ifコマンドを使う [, =, ]のそれぞれの前後にスペースが必要 if [ i = *** ] then コマンド fi と書くことで変数iの数字が***の場合のみthen fiで囲まれたコマンドを実行する Test_mac-7.command #!/bin/sh cd `dirname $0` for i in $(seq 1 3) do cp file.txt file${i}.txt done echo "- push ENTER key to end -" read WAIT exit Script Ifコマンドを使って、 変数iが2の場合の みコピーするように しましょう 36 課題7の答え合わせ If文を使って、file2.txtにだけfile.txtの内容を コピーするようなスクリプトを作成しましょう Test_mac-7.command #!/bin/sh cd `dirname $0` for i in $(seq 1 3) do [, =, ]のそれぞれの前後にスペースが必要 if [ $i = 2 ] then cp file.txt file${i}.txt fi done echo "- push ENTER key to end -" read WAIT exit 実行すると、file2.txtのみ作成される Script 37 課題8 PHITSを実行するスクリプトを作成し、自動で lec01.inpとlec02.inp, lec03.inpを計算してみましょう • PHITSの実行コマンドを定義する PHITSEXE=“/Users/***/phits/bin/phits274_mac.exe" と書くことでPHITSの実行コマンドがセットされる 自身の環境に合わ せてPATHを変える • PHITSの実行形式は < の後にインプットファイルを書く $PHITSEXE < lec01.inp と書くことでlec01.inpを入力ファイルとした計算が実行 される Test_mac-8.command #!/bin/sh cd `dirname $0` PHITSEXE=“/Users/***/phits/bin/phits274_mac.exe" for i in $(seq 1 3) do done echo "- push ENTER key to end -" read WAIT Script • 変数${i}を使っ て、3つのイン プットファイルが 動作するようにし ましょう • Phits.outに番号 を付けてコピーし ましょう 38 課題8の答え合わせ PHITSを実行するスクリプトを作成し、自動で lec01.inpとlec02.inp, lec03.inpを計算してみましょう Test_mac-8.command #!/bin/sh cd `dirname $0` PHITSEXE=“/Users/***/phits/bin/phits274_mac.exe" for i in $(seq 1 3) do $PHITSEXE < lec0${i}.inp cp phits.out phits${i}.out done echo "- push ENTER key to end -" read WAIT exit 実行すると、phits1.out, phits2.out, phits3.outが作成される Script 39 まとめ • スクリプト言語の基本的なコマンドの使い方を学んだ • PHITSを自動で複数回実行するスクリプトを作成した 工夫次第でPHITSの実行方法は非常に便利になります。 基本的なコマンドを組み合わせて、使い勝手の良いスク リプトを作成しましょう! Summary 40
© Copyright 2025 ExpyDoc