回答
不要重新發明輪子。
use strict;
use warnings;
use Regexp::Common qw/net/;
# see http://search.cpan.org/dist/Regexp-Common/lib/Regexp/Common/net.pm
my $Address = '...';
# adapted from the module's synopsis
for ($Address) {
/$RE{net}{IPv4}/ and print "Dotted decimal IP address";
/$RE{net}{IPv4}{hex}/ and print "Dotted hexadecimal IP address";
/$RE{net}{IPv4}{oct}{-sep => ':'}/ and
print "Colon separated octal IP address";
/$RE{net}{IPv4}{bin}/ and print "Dotted binary IP address";
/$RE{net}{MAC}/ and print "MAC address";
/$RE{net}{MAC}{oct}{-sep => " "}/ and
print "Space separated octal MAC address";
}
使用你所需要的一個。
如果您無法安裝模塊,那麼只需潛入模塊的代碼並獲取正確的正則表達式即可使用,具體取決於您希望匹配的IP地址類型。
或者,只要使用類似上面的內容,並調用相同的子地址,如果地址匹配您想要的任何符號或沿着這些線的東西。
從shell腳本利用這將是沿着線:
return perl -e'use Regexp::Common qw/net/;$ip=shift;if ($ip =~ /$RE{net}{IPv4}/){exit 0}else{exit 1}' "$Address";
以上將取代你的完整的「案例」塊。
同樣,如果您需要在perl腳本調用中內聯正則表達式,您可以通過閱讀模塊的代碼來實現。
check(){
case "$1" in
[0-9]|[0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5]) echo "0";;
*) echo "1";;
esac
}
ip="$1"
OIFS="$IFS"
IFS="."
set -- $ip
result="$(check $1)$(check $2)$(check $3)$(check $4)"
case "$result" in
"0000") echo "IP $ip Ok";;
*) echo "IP $ip not ok";;
esac
IFS="$OLDIFS"
在0-255範圍內的差不多三分之一(例如106和239)。爲什麼不這樣做:在[0-9] | [0-9] [0-9] | [0-2] [0-9] [0-9])(($ 1)中檢查(){case「$ 1」 > = 0 && $ 1 <= 255))&& echo「0」||回聲「1」;; *)echo「1」;; ESAC; }'驗證只有數字並且它們落在適當的範圍內? – 2010-08-27 04:10:11
你是對的。增加了更多檢查。不用整數比較方法。 – ghostdog74 2010-08-27 06:48:47
擊> = 3.2版(這可以大大縮短了):
valid() {
if [[ $1 =~ ^[[:digit:]]+$ ]] &&
(($1 >= 0 && $1 <= 255))
then
echo "0"
return 0
else
echo "1"
return 1
fi
}
saveIFS=$IFS
IFS='.'
ip=($1)
IFS=$saveIFS
for octet in ${ip[@]}
do
if ! valid $octet > /dev/null
then
valid=1
fi
done
[[ $valid != 1 ]] && echo "Good address" || echo "Bad address"
ip =($ 1)在ksh中無效 – lidia 2010-09-02 11:20:31
拆分而不被逐位移觸摸IFS和避免複雜的檢查地址:
declare -a part=(${ip//\./ })
declare -i valid=0
for p in ${part[@]}; do
if [[ $p =~ ^[[:digit:]]+$ ]] ; then
((valid += p>>8))
else
((valid++))
fi
done
if [ $valid -eq 0 ] ; then
echo -e "$ip OK"
else
echo -e "$ip NOT OK"
fi
這裏是一種更簡單,更簡單的方法。它只檢查基本結構,但在某些情況下它已足夠。
VALID=$(echo $IP | egrep '^[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}$');
if [ ! -n "$VALID" ]; then
echo "This IP ($IP) isn't valid. Please check it and try again.";
exit 0;
fi;
保存IP地址ip_server並使用下面的代碼檢查:
if [[ "$ip_server" =~ ^([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})$ ]]
then
for ((i=1; i<${#BASH_REMATCH[@]}; ++i))
do
((${BASH_REMATCH[$i]} &2; exit 1; }
done
else
echo "Wrong IP address" >&2
exit 1;
fi
- 1. Shell腳本來驗證文件名
- 2. 如何驗證Python腳本的語法?
- 3. 有效的方法來驗證XML?
- 4. 用於驗證列的shell腳本
- 5. shell腳本 - 檢查語法
- 6. 驗證CSS是否有效語法
- 7. 在shell腳本驗證JSON文件的語法,而無需安裝任何包
- 8. 神祕的shell腳本語法
- 9. 在Shell腳本中驗證變量
- 10. shell腳本來驗證列csv文件列
- 11. 腳本語言shell?
- 12. 來自Shell腳本的SSH
- 13. 用於驗證github憑證的Shell腳本
- 14. 從shell腳本到cshell腳本的語法更改是什麼?
- 15. 客戶端腳本生成非有效的HTML驗證
- 16. 語法錯誤執行shell腳本
- 17. unix shell腳本語法問題?
- 18. bash shell腳本語法錯誤
- 19. Shell腳本For循環語法錯誤
- 20. 語法閱讀從shell腳本
- 21. shell腳本中使用的mysql語句中的語法錯誤
- 22. 高效/簡單的方法來驗證空文本框?
- 23. sudoers語法來運行shell腳本爲php用戶?
- 24. RegExp驗證短信文本
- 25. 驗證數組值的有效方法
- 26. bash/shell腳本語句
- 27. shell說'語法無效'
- 28. 有效的方法來驗證記錄在Python是唯一/ PyTables
- 29. 在Bash/Shell腳本中的安全輸入驗證
- 30. 如何驗證要由shell腳本運行的命令
不好,我需要這個語法我的shell腳本的一部分 – lidia 2010-08-26 12:53:53
讀該位「如果你不能安裝模塊...「:只要閱讀模塊的代碼,並使用正確的正則表達式來獲得你想要的。如果您需要,我將使用IPv4的正則表達式更新它 – mfontani 2010-08-26 13:02:45