スクリプト言語を用いたPHITSの連続実行 Multi-Purpose Particle and Heavy Ion Transport code System スクリプト言語を用いたPHITSの連続実行 2017年1月改訂 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
実習内容 Windows版 Mac版 Table of contents 4
課題1 “Hello PHITS world”と出力されるスクリプトファイルを作成してみましょう テキストエディタでtest.batを開く Echoコマンドを使う Echo *** と書くことで***の部分が書き出される test.batをダブルクリックして実行 Test-1.bat おまじない1 不必要な情報が 出力されなくなる @echo off pause exit ここにコマンドを書く おまじない2 スクリプト終了時に一旦停止 Script 5
課題1の答え合わせ “Hello PHITS world”と出力されるスクリプトファイルを作成してみましょう Script 6 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 Hello PHITS world echo > file.txt pause exit 変数aaaを書き出しましょう Script 9
課題3の答え合わせ 変数に“Hello PHITS world”を代入してfile.txtに書き出してみましょう Script 10 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 set aaa=Hello PHITS world set /a iii=1 set /a echo %aaa% > file.txt pause exit 1が入っている変数iiiを 2にするには? File2.txtとなるように 書きかえましょう 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コマンドを使う Echoコマンドを使う Script 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に追記しましょう Script 14 Test-5.bat @echo off set /a iii=2 for /f "tokens=1-3" %%a in (file.txt) do ( ) pause exit 読み込んだ“Hello PHITS world” がfile2.txtに追記されるように しましょう Script 14
課題5の答え合わせ File.txtの内容を読み込んでfile2.txtに追記しましょう Script 15 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 ) pause exit 変数%%aに”Hello” %%bに” PHITS” %%cに”world” が代入されているので、 これらを並べて文章を作成する 実行すると、file2.txtの内容は file2.txt 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 ( ) pause exit 変数%%iを使って、File.txtを File%%i.txtにコピーしましょう Script 16
課題6の答え合わせ File.txtをコピーしてfile1.txt, file2.txt, file3.txtを作成しましょう Script 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 ) pause exit Ifコマンドを使って、変数%%iが2の場合のみコピーするようにしましょう Script 18
課題7の答え合わせ If文を使って、file2.txtにだけfile.txtの内容をコピーするようなスクリプトを作成しましょう Script 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を計算してみましょう SET PHITSEXE=“C:\phits\bin\phits289_win.exe“ と書くことでPHITSの実行コマンドがセットされる PHITSの実行形式は < の後にインプットファイルを書く %PHITSEXE% < lec01.inp と書くことでlec01.inpを入力ファイルとした計算が実行 される Test-8.bat 変数%%iを使って、3つのインプットファイルが動作するようにしましょう Phits.outに番号を付けてコピーしましょう @echo off SET PHITSEXE=“C:\phits\bin\phits289_win.exe“ for /l %%i in (1, 1, 3) do ( ) pause exit Script 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
実習内容 Windows版 Mac版 Table of contents 22
課題1 “Hello PHITS world”と出力されるスクリプトファイルを作成してみましょう Script 23 テキストエディタでTest_mac-1.command を開く Echoコマンドを使う Echo "***" と書くことでダブルクォーテーションで囲まれた***の部分が書き出される Test_mac-1.commandをダブルクリックして実行 Test_mac-1.command おまじない1 Shift+@ #!/bin/sh cd `dirname $0` echo "- push ENTER key to end -" read WAIT exit ここにコマンドを書く おまじない2 スクリプト終了時に一旦停止 Script 23
課題1の答え合わせ “Hello PHITS world”と出力されるスクリプトファイルを作成してみましょう Script 24 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
($aaaのように{}を省略できる場合もある) 課題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 変数aaaを書き出しましょう Script 27
課題3の答え合わせ 変数に“Hello PHITS world”を代入してfile.txtに書き出してみましょう Script 28 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` aaa="Hello PHITS world" echo $aaa > file.txt echo "- push ENTER key to end -" read WAIT exit 変数iiiに1を代入しましょう iii=iii+1の演算をさせiii=2 としましょう File2.txtとなるように 書きかえましょう Script 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コマンドを使う Echoコマンドを使う 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に追記しましょう Script 32 Test_mac-5.command #!/bin/sh cd `dirname $0` iii=2 cat file.txt | while read a b c do done echo "- push ENTER key to end -" read WAIT exit 読み込んだ“Hello PHITS world” がfile2.txtに追記されるように しましょう Script 32
課題5の答え合わせ File.txtの内容を読み込んでfile2.txtに追記しましょう Script 33 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 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を作成しましょう Script 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.txt, file2.txt, file3.txtが作成され File1(2,3).txt Hello PHITS world Script 35
課題7 If文を使って、file2.txtにだけfile.txtの内容をコピーするようなスクリプトを作成しましょう ifコマンドを使う if [ i = *** ] then コマンド fi と書くことで変数iの数字が***の場合のみthen fiで囲まれたコマンドを実行する [, =, ]のそれぞれの前後にスペースが必要 #!/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 Test_mac-7.command Ifコマンドを使って、変数iが2の場合のみコピーするようにしましょう Script 36
課題7の答え合わせ If文を使って、file2.txtにだけfile.txtの内容をコピーするようなスクリプトを作成しましょう Script 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を計算してみましょう PHITSEXE=“/Users/***/phits/bin/phits289_mac.exe" と書くことでPHITSの実行コマンドがセットされる PHITSの実行形式は < の後にインプットファイルを書く $PHITSEXE < lec01.inp と書くことでlec01.inpを入力ファイルとした計算が実行 される 自身の環境に合わせてPATHを変える Test_mac-8.command #!/bin/sh cd `dirname $0` PHITSEXE=“/Users/***/phits/bin/phits289_mac.exe" for i in $(seq 1 3) do done echo "- push ENTER key to end -" read WAIT exit 変数${i}を使って、3つのインプットファイルが動作するようにしましょう Phits.outに番号を付けてコピーしましょう Script 38
課題8の答え合わせ PHITSを実行するスクリプトを作成し、自動でlec01.inpとlec02.inp, lec03.inpを計算してみましょう Test_mac-8.command #!/bin/sh cd `dirname $0` PHITSEXE=“/Users/***/phits/bin/phits289_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を自動で複数回実行するスクリプトを作成した 基本的なコマンドを組み合わせて、使い勝手の良いスクリプトを作成しましょう! 《休憩はさむ》 まとめ Summary 40