2014-02-21 34 views
1

我的bash腳本的輸入可以是[fec1 :: 1]:80或[]:80的格式。第二個輸入意味着沒有給出IP地址。我的bash腳本是將輸入分成IP和端口。通過第二個輸入,腳本應該「理解」沒有給出IP。在bash中解析 - 從括號中提取內容

下面的邏輯似乎解決我的問題,在bash提示符:

$ ip=[]:78 
$ echo $ip 
[]:78 
$ temp=(`echo $ip | awk -F'[][]' '{print $2}'`) 
$ echo $temp 

$ 

當我嘗試從腳本中做同樣的事情,結果是不同的:

local_endpoint="$1" 
printf 'local_endpoint: %s\n' "$local_endpoint" 
IN="$local_endpoint" 

local_ip=$(echo "$IN" | awk -F'[][]' '{print $2}') 
if [ -z "$local_ip" ] ; then 
    local_ip=$(echo "$IN" | awk -F':' '{print $1}') 
    local_port=$(echo "$IN" | awk -F':' '{print $2}') 
else 
    local_port=$(echo "$IN" | awk -F'[][]' '{print $3}' | awk -F':' '{print $2}') 
fi 

printf 'IP: %s\n' $local_ip 
printf 'port: %d\n' $local_port 

if [ -z "$local_port" -a -z "$local_ip" ] ; then 
    printf 'No port and IP was given\n' 
elif [ -z "$local_ip" ] ; then 
    printf 'No IP was given\n' 
elif [ -z "$local_port" ] ; then 
    printf 'No port was given\n' 
fi 
exit 2 

輸出:

# ./temp.sh []:829 
local_endpoint: []:829 
IP: [] 
port: 829 

有什麼想法發生了什麼?另外,爲什麼我在輸出結尾處看到額外的逗號(,)?

+1

'printf的「端口:%d \ n」,$ local_port'將在我已經更新了我的問題跟你的更改腳本稍作修改結束 – kev

回答

1

你的腳本缺少在許多地方引用,並有在printf過流浪逗號。這個腳本應該工作:

local_endpoint="$1" 
printf 'local_endpoint: %s\n' "$local_endpoint" 
IN="$local_endpoint" 

if [[ "$IN" == "["* ]] ; then 
    local_ip=$(echo "$IN" | awk -F'[][]' '{print $2}') 
    local_port=$(echo "$IN" | awk -F'[][]' '{print $3}' | awk -F':' '{print $2}') 
else 
    local_ip=$(echo "$IN" | awk -F':' '{print $1}') 
    local_port=$(echo "$IN" | awk -F':' '{print $2}') 
fi 

printf 'IP: <%s>\n' "$local_ip" 
printf 'port: <%d>\n' "$local_port" 

if [ -z "$local_port" -a -z "$local_ip" ] ; then 
    printf 'No port and IP was given\n' 
elif [ -z "$local_ip" ] ; then 
    printf 'No IP was given\n' 
elif [ -z "$local_port" ] ; then 
    printf 'No port was given\n' 
fi 
exit 2 
+0

打印逗號。它仍然不會產生所需的結果。對缺少什麼有什麼想法? – Maddy

+0

如果您提供空IP,它將打印空輸出。運行你的腳本爲:'./temp.sh「[fec1 :: 1]:80」' – anubhava

+0

我試着在參數[]:80的引號周圍運行它,但結果是相同的;輸出顯示IP:[]。我希望腳本知道並顯示IP爲空。 – Maddy

0

進程替換是:

var=$(command ...) 

var=(command ...)