以一个IP地址为参数,判断该IP地址所在网段的主机在线状态,并打印出来
#!/bin/bash
set -ue
read -p "please input ipaddrs: " net
[[ $net =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]] || (echo "This is not a correct IP address";exit 10) #判断左边的字符串是否和右边的字符串相等,等同于判断了IP地址是否合法
net1=`echo "$net" | egrep -o "^([0-9]+\.){3}"`
for id in {1..254} ;do
{
ping -c1 -w1 $net1$id &>/dev/null && echo "$net1$id is up " || echo "$net1$id is down"
}&
done
wait
在读入一个IP地址为参数后,首先判断IP地址是否合法,合法才执行后续命令
{ COMMAND; }&
在脚本里可以实现命令后台并发执行
wait
可以实现在命令结束后自动切换到下一个命令提示符
这里可能涉及条件测试的知识:
test和 [ ]用法
-z STRING 字符串是否为空,没定义或空为真,不空为假,
-n STRING 字符串是否不空,不空为真,空为假
STRING 同上
STRING1 = STRING2 是否等于,注意 = 前后有空格
STRING1 != STRING2 是否不等于**
**> ascii码是否大于ascii码
< 是否小于
[[]] 用法,建议,当使用正则表达式或通配符使用,一般情况使用 [ ]
== 左侧字符串是否和右侧的PATTERN相同
注意:此表达式用于[[ ]]中,PATTERN为通配符
=~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
注意: 此表达式用于[[ ]]中;扩展的正则表达式