bash编程又称bash脚本和shell脚本,是一种有多条线终端命令构成的脚本程序,所有可以直接在终端界面里运行的命令,都可以通过脚本来执行
我们拿就拿ping命令来说,怎么使用ping命令对局域网进行扫描,识别当前网络下活跃主机,下面笔者将通过bash编程来简单的解释
1.在Linux中创建一个.sh程序 命令:touch xxxx.sh
2.启用编辑模式vim/nano编写脚本
在第一行:#/bin/bash 会让终端界面调用Bash解释器
第二行:if判断语句
它的写法很简单
if [条件表达式]
then
..............
else
..............
相当于其他语言if判断语句,拿java来说,上面的if判断语句就等同于
if(条件表达式){
..................
}else{.
}
then即相当于大括号
条件表达式[" $1" == " " ] 这句话的意识是说[ "当第一个参数为空时" ] $1表示传入的第一个参数。==是逻辑判断符
下面的echo "........",用于像终端界面输出提示,当第一个传输参数为空的时候就会显示echo “ ”中的内容,如果不为空就显示else里面的内容
但光有if语句是不行的,即使传递了一个参数,这个程序也不具备相应的处理功能,因为我们要探测某个“c类网段”的全部在线主机,所以需要以循环的方式ping那些末尾为1~254(IPv4地址的最后一个八位组)的全部IP
for循环语句
for x in `seq 1 254`;
等同于java中
for(int x=1;x<=254;x++){
}
当我们传递参数时,例如当我们在终端执行./xxxx.sh 192.168.20时脚本程序会从192.168.20.1开始直到运行到192.168.20.254时结束
(这里说一下,为什么需要以./xxxx.sh来运行程序。应为当前目录没有被环境变量PATH收录所有不能直接以xxx.sh运行)
for x in `seq 1 254`;后面跟do表示执行,do下面就是要执行的内容了
ping -c $1.$x
我们希望程序在for循环语句的每次迭代过程中都ping一个ip地址。根据相关使用说明可知,ping命令的-c选项可以限定它ping某台既定主机的探测次数。因此-c选项设定为1,让程序对每个主机只ping一次
$1.$x:$1表示传入的第一个参数,$x表示for循环使用的循环变量
但是这样ping出来的效果好像不是很理想,因为我们只需要知道在线的主机就行了
所以我们在ping -c $1.$x后面加上grep筛选命令
ping -c $1.$x | grep "64 bytes from"
如此一来就可以只看在线主机的ip地址了
值得注意的是在保存脚本过后,需要使用chmod命令进行权限处理
网友评论