我必須編寫一個shell腳本,我需要在許多遠程服務器上運行它。 腳本基本上在這些服務器上執行traceroute -m。從shell scipt中的命令行參數中提取一個模式
我必須先驗證ip格式,然後從輸入中提取ip地址。
輸入: -
192.168.1.1
192.168.1.1 2222
192.168.1.1:2222
Any garbage values
有可能是在輸入沒有端口,空間之前,端口號或冒號。
我要提取輸入的IP部分(192.168.1.1
)
我的腳本: -
ip=`echo $1`
re='^([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})[ :]([0-9]{1,5})$'
if [[ $ip =~ $re ]]; then
ip=`echo $ip | sed 's/[ :].*//'`
command=$(traceroute -m 9 $ip 2>&1)
echo "$command"
else
echo "Entered ip address is not valid"
fi
我怎麼IP傳遞給腳本: -
$./script.sh 192.168.1.1 2222
這腳本驗證的IP,但不是如果我通過IP空間和端口號。
輸入:-192.168.1.1 2222(不工作)
輸入: - 192.168.1.1:2222(工作)
輸入: - 192.168.1.1(不工作) 任何人都可以指出錯誤?
EDITED
還好我要去這個腳本: -
1 #!/bin/bash
2 ip="[email protected]"
3 re='([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})'
4 if [[ "$ip" =~ $re ]]; then
5 ip=`echo "$ip" | sed 's/^\([^: ]*\).*$/\1/'`
6 command=$(traceroute -m 9 "$ip" 2>&1)
7 echo "$command"
8 else
9 echo "Entered ip address is not valid"
10 fi
什麼值得注意的?任何我可能錯過的場景?
'ip =「$ {BASH_REMATCH [1]}」'有時在solaris上不起作用。 我可以使用'ip ='echo $ ip | sed's/[:]。* //''而不是那個? –
你可以試試'echo「$ ip」| sed's/^ \([^:] * \)。* $/\ 1如果ip =「$ {BASH_REMATCH [1]}」不起作用。 – anubhava
非常感謝你! :) –