一、简介
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修课之一。
Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。在本文中,我们关注的重点是Bash,也就是Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用;同时,Bash也是大多数Linux系统默认的Shell。
二、编程实例
程序1:批量并行telnet
在网络测试过程中,我们需要从某台服务器telnet其他很多服务器的某个端口,如22端口,如果能够批量并行的执行telnet对端端口,将大大提高测试效率,利用Shell编程可实现这一功能。
#文件结构
test10-was%tree . |-- ip.list #测试ip列表 |-- telnet_port.sh #测试Shell脚本 |-- telnetAlive.txt #连通结果集 |-- telnetNotAlive.txt #未连通结果集 `-- telnetResult.txt #日志
#文件名:ip.list
#功能:存储待测试ip列表
#格式如下
10.87.30.10 10.87.30.11 10.87.30.12 10.87.30.13 10.87.30.14 #此处需下空一行,并再次书写最终ip 10.87.30.14
#文件名:telnet_port.sh
#功能:网络测试
#!/bin/bash rm telnetResult.txt >/dev/null 2>&1 rm telnetAlive.txt >/dev/null 2>&1 rm telnetNotAlive.txt >/dev/null 2>&1 TestPort=30000 #要测试的端口号 for i in $(cat ip.list) do (telnet $i $TestPort<<EOF>>telnetResult.txt &)>>telnetResult.txt 2>&1 sleep 1 quit EOF done
cat telnetResult.txt | grep -B 1 ] | grep [1-9] | awk '{print $3}' | cut -d '.' -f 1,2,3,4 > telnetAlive.txt cat ip.list telnetAlive.txt | sort | uniq -u > telnetNotAlive.txt
运行: