ファイルからコマンドを読み取り、特定のコマンドを実行するスクリプトを作成しています。単一の入力引数に対して、または引数が問題の引数を含むファイル名である場合に、スクリプトを機能させたい。
以下の私のコードは、1つの問題を除いて機能し、ファイルの最後の行を無視します。したがって、ファイルが次の場合。
file.txt
file1
file2
以下に投稿されたスクリプトは、file.txtのコマンドのみを実行します
for currentJob in "$@"
do
if [[ "$currentJob" != *.* ]] #single file input arg
then
echo $currentJob
serverJobName="$( tr '[A-Z]' '[a-z]' <<< "$currentJob" )" #Change to lowercase
#run cURL job
curl -o "$currentJob"PisaInterfaces.xml http://www.ebi.ac.uk/msd-srv/pisa/cgi-bin/interfaces.pisa?"$serverJobName"
else #file with list of pdbs
echo "Reading "$currentJob
while read line; do
echo "-"$line
serverJobName="$( tr '[A-Z]' '[a-z]' <<< "$line" )"
curl -o "$line"PisaInterfaces.xml http://www.ebi.ac.uk/msd-srv/pisa/cgi-bin/interfaces.pisa?"$serverJobName"
done < "$currentJob"
fi
done
もちろん、whileループの後にループ内の手順を繰り返して最後のファイルでこれらのコマンドを完了するという明らかな回避策がありますが、whileループ内で行った変更は再度繰り返す必要があるため、これは望ましくありません。 whileループの外側。私はオンラインで検索しましたが、この正確な質問をしている人を見つけることができませんでした。私はそれがそこにあると確信していますが、私はそれを見つけていません。
私が得る出力は次のとおりです。
>testScript.sh file.txt
Reading file.txt
-file1
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 642k 0 642k 0 0 349k 0 --:--:-- 0:00:01 --:--:-- 492k
私のbashバージョンは3.2.48です