2012-07-24 3 views
0

좋아요, 그래서 주소 목록이 있고 그 다음에 포트 번호가 있습니다. 것은 항상 사실이 아니다. .com 후 포트 번호가있는 경우추가 줄이있을 때만 잘라냅니다. 리눅스

www.google.com:80 
www.gmail.com:8080 
www.yahoo.com 
www.msn.com:443 
www.amazon.com 
www.apple.com 
www.hotmail.com 

내가 선으로이 목록 라인을 보유하고있는 텍스트 파일을 통해 이동하고 주소를 절단하고 싶은와 것은 다음 잘라 예를 들어 나는이 목록을 가지고 그 포트 번호를 출력하고 변수에 저장하십시오. 이것은 내가 뭘하려 :이 대신 필요할 때 :가 그냥 443 낙찰 후 무엇을하지 않는 실행

for each in `cat address.txt`; do 
    f_address=$each 
    f_port=`echo $each | cut -d":" -f2` 

    if [[ "$f_address" == *:* ]]; then 
     address=`echo $f_address | cut -d":" -f1` 
    else 
     address=$f_address 
    fi 

    if [ "$f_port" = "*" ]; then 
     port=$f_port 
    else 
     port="443" 
    fi 

. 이와

+0

기다립니다, 먼저는'할 경우 [[ "$의 f_address"== * *]]'두 배'==', 당신은 할 '경우 [ "$와 f_port "="* "];'단 하나의 = '? 또한,'= *'는 그렇게 작동하지 않고 단지 비어있는 것을 테스트합니다. – Konerak

답변

4

시작 :

while IFS=: read host port; do 
    : ${port:=443} # assign default value 
    echo host=$host 
    echo port=$port 
done < address.txt 
+0

이것은 '주소 : 포트'가있는 파일의 컨텍스트를 읽는 하나의 for 루프를 통해 모두 실행됩니다. 그러나 포트가 항상 존재하지는 않으며 그렇지 않은 경우 포트를 443으로 기본 설정하려고합니다. – bloodstorm17

+1

이것이 바로이 코드의 기능입니다. –

+0

하지만 루프에 필요한 포트 및 주소 변수가 필요합니다. 다른 방법으로 나는 예상보다 많은 결과를 얻는다. 이 주어진 문제에 대해서는 작동 할 수 있지만 여전히 if/else 문 경로에 접근하려고합니다. – bloodstorm17

관련 문제