2012-07-01 2 views
2

FTP에서 일부 파일을 다운로드 할 수있는 스크립트를 작성하는 데 많은 시간이 걸렸으며 select 문을 사용하여 ftp 하위 디렉토리에 디렉토리를 지정해야합니다. 또한 옵션을 제공하기 위해서는 모든 것을 @ bottom에서 @ $ DNAtype을 실행해야합니다. 누군가 아이디어 있어요?추가 옵션이있는 Linux select 문

내 코드는 다음과 같습니다 (네덜란드의 의견 죄송합니다)

#!/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 
+0

이 스크립트에는 문제가 너무 많습니다. 가장 즉각적인'선택 '문제는'$ lijst'에 대한 반복을위한 단어 분리이지만, 다른 많은 [인용] (http://mywiki.wooledge.org/Quotes)과 구문 문제로 인해이 문제가 발생할 수 있습니다 실패. – ormaaj

답변

1

당신의 선택 문 배열을 사용해야하고 배열에 항목을 추가하거나 select 문에서 배열 이름 뒤에 추가 할 수 있습니다. 당신이 선택

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" 

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" 

또는

는 배열의 추가 옵션을할지 여부에 따라 달라집니다.

모두를 다운로드하려면 배열을 반복하면됩니다 (예 : 두 번째 버전을 사용하면 파일 이름이 아니기 때문에 "모두 다운로드"를 건너 뛰지 않아도됩니다.)

추가 참고 :. 명령 치환을위한

사용 $() 대신 역 따옴표

이 문장은 if [$dnatype == ""] 공간이 필요합니다 :. if [ $dnatype == "" ]

견적 모든 VARI을 확장 될 때 ables. 당신은 어떤 곳에서는 이것을했지만 다른 사람들에게는하지 않았습니다.

끝 부분에있는 긴 파이프 라인을 거의 확실하게 단순화 할 수 있습니다. 예제 데이터가 없으면 나는 단지 어떻게 추측 할 수 있습니다.

+0

도움을 주셔서 고맙습니다. 어떻게 다운로드 할 수있는 옵션을 추가 할 수 있습니까? pep and dna? –

+0

@SanderVanderZeeuw : 예제에서 "다른 옵션"이있는 곳에 "Download pep and dna"를 입력하십시오. 'select' 블록 테스트 후에'$ dnatype'이 그 문자열을 포함하고 있는지 확인한 후 적절한 경우'curl' 명령을 실행하십시오. –

+0

괜찮아. 이해해. 그러나 말풍선 커맨드는 2 개의 파일에있는 연결을 나눌 수 없다. 1 개의 dir은 pep이고 1 dir은 dna이기 때문에 생각하면된다. –