Bash-Script 应用案例
Posted brt3
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bash-Script 应用案例相关的知识,希望对你有一定的参考价值。
网络测试
自动 ping 测试
host_addr="192.168.234.231" conn_num=0 timeout=3 # 设定等待时间 until [ $conn_num -gt 1 ]; do # 此处的1可以改写,用来衡量网络稳定系数 conn_num=$(ping -c 4 -w $timeout $host_addr | grep icmp_seq | wc -l) sleep 5.0 # 等待网络调整,或者执行其他动作 done
检测端口是否打开
1. 通过 netcat 工具
2. 利用 wget 测试
3. 利用 telnet 检测
当远程设备的端口未开启时,命令会自动退出:
但当远程设备端口开启时,telnet 会进入连接模式,需要键入 ‘^]‘ 指令退出:
在脚本编程中,如何优雅的退出 telnet 命令?
输出结果后立即退出
$ echo "" | telnet 101.199.97.65 8022 Trying 101.199.97.65... Connected to 101.199.97.65. #已成功连通端口 Escape character is ‘^]‘. Connection closed by foreign host. # 自动退出
输出结果后延迟退出
$ sleep 0.1 | telnet 101.199.97.65 8022
脚本如何判断 telnet 的执行结果?
sleep 0.1 | telnet 10.10.70.138 5900 | grep Connected | wc -l
通过上述命令,如存在Connected关键字,则wc计数为1,否则为0,来判断端口是否连接成功。
另外,实践中发现,telnet不会检测网络连接状态。所以最好在检测端口前,先通过ping指令确认网络能够连接,再测试端口。
综上,提供脚本实例:
function try_host_port { host_addr="192.168.234.231" port=5900 local timeout=3 # 设定等待时间 conn_num=$(ping -c 4 -w $timeout $host_addr | grep icmp_seq | wc -l) if [ $conn_num -lt 1 ]; then # 此处的1可以改写,用来衡量网络稳定系数 echo "False" return 1 fi # 验证VNC端口,并等待端口开启 local port_status=0 until [ $port_status -eq 1 ]; do port_status=$(sleep 1 | telnet ${host_addr} ${port} | grep Connected | wc -l) sleep 1 # 轮询周期 done }
以上是关于Bash-Script 应用案例的主要内容,如果未能解决你的问题,请参考以下文章
如何从Ansible-playbook的bash-script启动后台循环
English Snippet 5 - How to Pass Arguments to a Bash-Script