2

FTP からいくつかのファイルをダウンロードできるスクリプトを書くのに忙しく、ftp サブディレクトリ内のディレクトリを指定する select ステートメントが必要です。しかし、オプションのダウンロードを提供するには、これはすべて、下部の @ $DNAtype で行う必要があります。誰かアイデアはありますか?

私のコードは次のとおりです:(オランダ語のコメントで申し訳ありません)

#!/bin/bash/
#16-03-2012
#Sander van der Zeeuw s1040176

#Variabele om de ftp aan te kunnen roepen
var='ftp://ftp.ensembl.org/pub/release-66/fasta/'
#Hier word de lijst met beschikbare organisme binnengehaald via de functie curl.
# curl is te installeren via de terminal met het command sudo apt-get install curl
lijst=`curl $var | awk '{print $NF}'`

echo "de keuze 0 selecteert alles"

#hier wordt een directory aangemaakt om de files in weg te schrijven
mkdir -p dnaenpep
cd dnaenpep



#Hier wordt een keuze menu gecreeerd om het juiste organisme te kiezen.
select specie in $lijst
do
    break
done
echo "Uw keuze is:" $specie


#Hier wordt de keuze "0" ingebouwd. Zodat alle genomen gedownload worden.
if [ "$specie" == "" ]
then
    for i in $lijst
    do
        namen=$(curl $var$i/dna/ | awk '{print($NF)}')
        for files in $namen; do curl $var$i/dna/$files -o $files
                    curl $var$i/pep/$files -o $files
        done 
    done
fi

echo "de keuze 0 selecteert alles"

#Wanneer de loop niet uitgevoerd wordt, zal via nog een select statement de gekozen worden #welk DNA je van de ftp wil downloaden. 
lijst2=`curl $var$specie/ | awk '{print $9}'`
echo $lijst2

select dnatype in $lijst2
do
    break
done
echo "uw keuze is:" $dnatype

if [$dnatype == ""]
then
    for i in $dnatype
    do
        wget -O DNAtype "$var$specie/dna/"
        wget -O DNAtype "$var$specie/pep/"
    done
fi

#Hier worden de files die in $dnatype gemaakt worden gedownload.
wget -O DNAtype "$var$specie/$dnatype/"

cat DNAtype | egrep "=" | tr '"' '\n' | sort | grep ^"ftp" |grep gz > Downlist.txt
wget -c -i  Downlist.txt

exit
4

1 に答える 1

1

select ステートメントは配列を使用する必要があり、配列に項目を追加したり、selectステートメントの配列名の後に項目を追加したりできます。

lijst2=($(curl "$var$specie/" | awk '{print $9}')
lijst2+=("Another option" "Additional option" "Download all")
echo "${lijst2[@]}"

select dnatype in "${lijst2[@]}"
do
    break
done
echo "uw keuze is: $dnatype"

また

lijst2=($(curl "$var$specie/" | awk '{print $9}')
echo "${lijst2[@]}"

select dnatype in "${lijst2[@]}" "Another option" "Additional option" "Download all"

do
    break
done
echo "uw keuze is: $dnatype"

どちらを選択するかは、配列に追加されたオプションが必要かどうかによって異なります。

すべてをダウンロードするには、配列を反復するだけです (そのため、ファイル名ではないため、たとえば「すべてダウンロード」をスキップする必要がないように、おそらく 2 番目のバージョンを使用することをお勧めします。

その他の注意事項:

$()コマンド置換のバッククォートの代わりに使用します。

このステートメントif [$dnatype == ""]にはスペースが必要です: if [ $dnatype == "" ].

展開されたときにすべての変数を引用します。あなたはいくつかの場所でこれを行いましたが、他の場所ではそうしませんでした.

終わり近くの長いパイプラインはほぼ確実に簡素化できます。例のデータを見なければ、その方法を推測することしかできませんでした。

于 2012-07-01T11:21:14.820 に答える