2015-11-09 41 views
0

我正試圖收集我的IP地址和子網位(如192.168.2.17/24)傳遞給fing以及名稱以掃描網絡並創建一組輸出文件。我編寫了一個工作腳本,其中包含地址/ len和作業名稱。我最終希望能夠擴展shell腳本自動拉地址/ len,這樣我只需要輸入作業名稱。如果有幫助,我使用Mac。爲什麼我的bash函數將參數作爲字符串處理?

fing.sh(這工作!)

#Create a fing profile and scan 
mkdir $2 
fing -n $1 -r 3 -d false --session $2/persist.fing \ 
-o table,html,$2/fing.html -o table,csv,$2/fing.csv \ 
-o table,xml,$2/fing.xml -o table,json,$2/fing.json 

test.sh

#!/bin/bash 

#Variables 
ipaddr=ip 
hexmask=netmask 
testmask=255.255.252.0 
#thing=0 

的IP地址和子網掩碼職能的工作;至少他們似乎是。

#Functions 
ip() 
{ 
    ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}'  
} 

netmask() 
{ 
    ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $4}'  
} 

的功能,mask2cidrhex2decip爲個別腳本。

mask2cidr() { 
#Source: 
#http://www.linuxquestions.org/questions/programming-9/bash-cidr-calculator-646701/#post3173472 
#Convert dotted decimal subnet mask to cidr format 
    nbits=0 
    IFS=. 
    for dec in $1 ; do 
     case $dec in 
      255) let nbits+=8;; 
      254) let nbits+=7;; 
      252) let nbits+=6;; 
      248) let nbits+=5;; 
      240) let nbits+=4;; 
      224) let nbits+=3;; 
      192) let nbits+=2;; 
      128) let nbits+=1;; 
      0);; 
      *) echo "Error: $dec is not recognised"; exit 1 
     esac 
    done 
    echo "$nbits" 
} 



hex2decip() 
{ 
#Source: 
#https://forums.freebsd.org/threads/ifconfig-display-non-hex-netmasks.2834/#post-86216 
#Converts hex formatted subnet to dotted decimal format 
if [ ! "$1" ] ; then 
     echo 
     echo "$MyName - converts an IP address in hexadecimal to dotted decimal" 
     echo "Usage: $MyName <hex_address>" 
     echo 
     exit 1 
fi 

echo $1 | sed 's/0x// ; s/../& /g' | tr [:lower:] [:upper:] | while read B1 B2 B3 B4 ; do        
     echo "ibase=16;$B1;$B2;$B3;$B4" | bc | tr '\n' . | sed 's/\.$//'            
done 
} 

IPADDRhexmask輸出作爲預期

${ipaddr} 
${hexmask} 

對於hex2deciphexmask似乎通過 「子網掩碼」,而不是掩碼函數的結果。

hex2decip $hexmask 


exit 0 

./test.sh OUTPUT

10.0.180.14 
0xffffff00 
(standard_in) 1: illegal character: N 
(standard_in) 1: illegal character: T 
(standard_in) 1: illegal character: M 
(standard_in) 1: illegal character: S 
(standard_in) 1: illegal character: K 
+0

爲什麼'$ hexmask'會調用任何東西?你需要使用反引號或'$()'語法。 –

回答

3
hexmask=netmask 

設置shell變量hexmask字符串netmask。這就是外殼的工作原理。

如果你想呼叫shell功能netmask的結果,你需要使用命令替換:(後第一個定義netmask功能,當然)

hexmask=$(netmask) 

順便說一句,

ipaddr=ip 
testmask=255.255.252.0 

以同樣的方式工作。 ipaddr設置爲字符串iptestmask至字符串255.255.252.0

+0

感謝您的快速回復! 當我改變爲hexmask = $(netmask)時,我得到「./test.sh:line 5:netmask:command not found。」 – somehume

+1

@somehume:在定義函數'netmask'後,你必須這樣做*。由於您只是粘貼腳本片段而不是完整的腳本,因此很難知道哪個片段會到達哪裏。我以爲你在嘗試調用它們之前定義了這些函數。 – rici

+0

嘿嘿...(程序) 我粘貼了整個事情,然後分手了。這使現在更有意義。感謝一束。我一整天都在這。 – somehume

相關問題