こんにちは私の仕事を改善するためのbashスクリプトを作成しています。私は、このようなevalがbashスクリプトファイルによって呼び出されました
file1.dat
file2.dat
file3.dat
file1.inp
file2.inp
file3.fal
としてディレクトリにいくつかのファイルを持っている場合、私はシェル内の数字は、次のコマンド
PBS_nastran ver=20101 mem=48Gb mod=i8 i=file1.dat
PBS_nastran ver=20101 mem=48Gb mod=i8 i=file2.dat
PBS_nastran ver=20101 mem=48Gb mod=i8 i=file3.dat
PBS_abaqus ver=6133 ncpu=16 j=file1.inp
PBS_abaqus ver=6133 ncpu=16 j=file2.inp
PBS_falancs j=file1.fal
私はそれは大丈夫だsympleスクリプト
code='nastran'
case $code in
abaqus) command="PBS_abaqus ver=6133 ncpu=16 j="
ext=".inp";;
nastran) command="PBS_nastran ver=20101 mem=48Gb mod=i8 i="
ext=".dat";;
falancs) command="PBS_falancs j="
ext=".fal";;
esac
file_list=$(ls * | grep "$ext$")
file_list=${file_list//"./"/}
file_list=$(echo $file_list | tr " " "\n")
for file in $file_list
do
command=$command$file
eval $command
done
これを作成しましたしなければなりません正しく動作します。最適化プロセスの次のステップは、それが* .shのファイルにコードを置くことだと私は作成この
#!/bin/bash
case $1 in
abaqus) command='PBS_abaqus ver=6133 ncpu=$3 j='
ext='.inp';;
nastran) command='PBS_nastran ver=20101 mem=48Gb mod=i8 i='
ext='.dat';;
falancs) command='PBS_falancs j='
ext='.fal';;
esac
if [ -z $2 ]
then
file_list=$(ls | grep -E "[0-9]{8}_[[:alnum:]].*_RUN_[[:alnum:]].*${ext}$")
file_list=${file_list//"./"/}
file_list=$(echo $file_list | tr " " "\n")
else
file_list=$2
fi
for file in $file_list
do
command=$command$file
eval "$command"
done
が、私の昼食のスクリプトは、「NASTRAN ./script.sh」エラーが発生した場合: ./ lancia.sh:line26:PBS_nastran:コマンドが見つかりません 問題は空白の解釈にあると思いますが、修正方法を理解できません。 ありがとうございました
2つの質問:(1)このファイルには実行権限がありますか? (2)これはWindowsやUnix上で書かれていましたか? –
'eval'を使うときの最初の考えは"私は間違っていますか? " – chepner
シェルスクリプトをデバッグする最良の方法は、スクリプトの先頭に 'set -x'を置くことです。実行中のすべてのコマンドが表示されるので、展開されているすべての変数を見ることができます。 – Barmar