Strona 1 z 1

[+] Prasujemy zmienną $DONOS za pomocą polecenia cut

: 25 marca 2010, 12:04
autor: urocz
Idzie wiosna a z nią sprzątanie i prasowanie. Mam mały problem, napisałem skrypt do wyciągania mac adresów i ip z ARP.

I to co się dzieje:

Kod: Zaznacz cały

CUT="/bin/cut"
DONOS="/sbin/arp -n"
ips=`echo $DONOS | $CUT -c 1-16 ` tu cos nie fika
arps=`$echo $DONOS  | $CUT -c34-50`# tu cos nie fika
i3=0
	for WORD in `echo ${ips}` ; do 
		tab_ips[$i3]=`echo $WORD |  $CUT -c 1-16 `
		echo "${tab_ips[$i3]}"
			((i3=1+i3))
	done 
....
I powyższe rozwiązanie nie działa, chodzi tu o wycięcie kolumny za pomocą polecenia ,,cut''.

Kod: Zaznacz cały

ips=`echo $DONOS | $CUT -c 1-16 `
Natomiast działa tylko wtedy gdy zrobię:

Kod: Zaznacz cały

ips=`/sbin/arp -n | $CUT -c 1-16 `
Jednak to ma wadę bo za każdym razem pobiera nowe wartości i mogą się różnic, a mnie zależy by były te same, by zmienna ips pobierała dane z $DONOS, a nie za każdym razem wywoływała arp.

: 25 marca 2010, 13:54
autor: lessmian2
Nie:

Kod: Zaznacz cały

ips=`echo $DONOS | $CUT -c 1-16 `
a:

Kod: Zaznacz cały

ips=`$DONOS | $CUT -c 1-16 `

: 25 marca 2010, 18:43
autor: urocz
Też prasuje całkowicie inaczej niż przy bezpośrednim pobieraniu danych z arp.

Prasuje ładnie gdy zrobię:

Kod: Zaznacz cały

ips=`/sbin/arp -n | $CUT -c 1-16 `
Wycina pierwszą kolumnę ale ma wadę, bo za każdym odwołaniem się pobiera nowe dane, które muszą się różnic a muszę do jednej tabeli wyciąć lite ip z ,,arp -n'' a do drugiej listę mac adresów.
Zatem wpadłem na pomysł, że zawartość arp przypisze do zmiennej $DONOS jednak nie mogę z niej ładnie wydobyć dwóch kolumn.

To cała funkcja:
http://wklejto.pl/61638

Kod: Zaznacz cały

function donosiciel 
{
#funkcja przypisuje mac do ip 

DONOS=`/sbin/arp -n`
ips=`echo $DONOS |  $CUT -c1-16 ` 
arps=`echo $DONOS  |  $CUT -c34-50`
echo "$ips"
echo "$arps"
i3=0
	for WORD in `echo ${ips}` ; do 
		tab_ips[$i3]=$WORD 
		echo "${tab_ips[$i3]}"
			((i3=1+i3))
	done 
	
i4=0	
	for WORD in `echo ${arps}` ; do 
	tab_arps[$i4]=$WORD
		echo "${tab_arps[$i4]}"
		((i4=1+i4))
	done
	
ILE_SPY=${#tab_spy[*]}
i4=0
i5=0
	for (( i4=0; i4<$ILE_SPY;i4++ )); do
	
		for (( i5=0;i5<$ILOSC_ARP;i5++ )); do
				
				S_Q=${tab_spy[${i4}]}
				A_Q=${tab_arp[${i5}]}
				
		if [ "`echo $S_Q`" =  "`echo $A_Q`" ]; then
		tab_donos[i4]="echo $S_Q - ${tab_ips[i4]}" 
		((i4=1+i4))
		i5=0
		
		fi
		done	
	done	
}
Temat rozwiązany, dziękuję za wsparcie.

Okazało się, że wystarczy zrobić:

Kod: Zaznacz cały

ips="`$DONOS | CUT -c 1-16`"