Привет, Я создаю скрипт 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
, но если я обед сценарий «./script.sh Nastran» есть ошибка: ./ lancia.sh: строка26: PBS_nastran: команда не найдена Я думаю, что проблема заключается в интерпретации пустого пространства, но я не понимаю, как это исправить. Благодарим за помощь
два вопроса: (1) Имеет ли этот файл права на исполнение? (2) Было ли это написано на Windows или Unix? –
Ваша первая мысль при использовании 'eval' должна быть« Что я делаю неправильно? » – chepner
Лучший способ отладки сценария оболочки - поставить 'set -x' в начале скрипта. Затем он отображает каждую команду, когда она выполняется, поэтому вы можете видеть, что все расширяемые переменные. – Barmar