Bash-Script 应用案例
系统功能
查询当前系统信息
手动查询:
uname -a
尽管这个方法最为常用,但在脚本中,它有时无法显示诸如 Debian、Ubuntu 这样的信息,而是
Debian >> uname -a
Linux v-dj 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2 (2017-04-30) x86_64 GNU/LinuxUbuntu >> uname -a
Linux v-ux 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linuxi5os >> uname -a
Linux i5 3.14.18-ipipe #116 SMP PREEMPT Tue Nov 20 18:27:25 PST 2018 i686 i686 i686 GNU/LinuxWindows >> uname -a
MSYS_NT-6.1 N-SH-465 2.10.0(0.325/5/3) 2018-03-15 14:12 x86_64 MsysTermux >> uname -a
Linux localhost 3.10.61+ #1 SMP PREEMPT Sat Jul 1 17:40:54 CST 2017 aarch64 Android
方法1: lsb_release -a
lsb_release -i | awk '{print $3}'
方法2:
cat /etc/issue | awk '{print $1}'
方法3: just for centos/fedora
cat /etc/redhat-release
使用 Python 脚本实现功能
def system(str_cmd):try:status = subprocess.run(str_cmd, shell=True)except AttributeError:status = subprocess.call(str_cmd, shell=True)return statusdef system2(str_cmd):bytes_stdout = subprocess.check_output(str_cmd, shell=True)return bytes_stdout.decode("utf8") # rstrip("\n")def _D_os_release_version(): # deprecatedstr_shell = [# 方法1: lsb_release -a"lsb_release -i | awk '{print $3}' ",# 方法2: cat /etc/issue"cat /etc/issue | awk '{print $1}' ",# 方法3: cat /etc/redhat-release # for centos/fedora"cat /etc/redhat-release" # 未测试?? ]def trying(index):try:os_version = system2(str_shell[index])return os_version if os_version else Noneexcept Exception as e:logging.exception("os_release_version() -->> {}".format(e))trying(index + 1)trying(0)def os_release_version():try:# 方法1: lsb_release -astr_shell = "lsb_release -i | awk '{print $3}' "os_version = system2(str_shell)except subprocess.CalledProcessError: # 不存在 lsb_release 命令logging.debug("os_release_version() -->> 不存在'lsb_release'命令,非Debian系列发行版")# 方法2: cat /etc/issueif os.path.exists("/etc/issue"):str_shell = "cat /etc/issue | awk '{print $1}' "# 方法3: cat /etc/redhat-release # for centos/fedoraelif os.path.exists("/etc/redhat-release"):str_shell = "cat /etc/redhat-release" # 未测试??else:# 未查询到当前系统的类型/发行版logging.warn("os_release_version() -->> 未知的操作系统发行版")system("uname -a")return Nonetry:os_version = system2(str_shell)except Exception as e:logging.error("os_release_version() -->> {}".format(e))os_version = os_version.rstrip("\n").lower() if os_version else Nonereturn os_version
View Code
文件IO操作
逐行读取文件
flag=0 cat data.txt | while read line doif [[ flag -eq 0 ]]; then# echo $lineif [ "$line" == "__ARCHIVE_BELOW__" ]; then((flag=1))fielseecho $line >> temp_1.tarfi done
当前脚本只运行一个实例
LOCK=/var/file.lock set -o noclobber # 设置禁止重定向覆盖 if [ -f $LOCK ]; thenecho "file.sh already running..."exit elseecho "$$" > $LOCKtrap 'rm -f "$LOCK"; exit $?' INT TERM EXIT fi# do anything here...
网络测试
自动 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 8022Trying 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=5900local 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 1fi# 验证VNC端口,并等待端口开启local port_status=0until [ $port_status -eq 1 ]; doport_status=$(sleep 1 | telnet ${host_addr} ${port} | grep Connected | wc -l)sleep 1 # 轮询周期 done }
转载于:https://www.cnblogs.com/brt3/p/10114275.html
Bash-Script 应用案例相关推荐
- Bash+R: howto pass parameters from bash script to R(转)
From original post @ http://analyticsblog.mecglobal.it/analytics-tools/bashr/ In the world of data a ...
- 树莓派红外线报警c语言,【BASH SCRIPT】在树莓派上用HC-SR501红外感应器触发USB摄像头拍照...
5-1假期闲的没事继续折腾树莓派.这次是尝试模拟一个防盗报警器,用HC-SR501 被动红外动作感应器 (Passive Infrared/PIR motion sensor)来触发USB camer ...
- Linux集群服务知识点总结及通过案例介绍如何实现高性能web服务
转自:http://guodayong.blog.51cto.com/263451/1201101 一:集群相关概念及知识点介绍: LVS(Linux Virtual System) 本项目在1998 ...
- 最全的Linux运维bash脚本常见用法总结
删除重复的数组元素 创建临时关联数组.设置关联数组 值并发生重复赋值时,bash会覆盖该键.这 允许我们有效地删除数组重复. CAVEAT:需要bash4+ 示例功能: remove_array_du ...
- Linux Bash常用的脚本工具整理
参考: https://bash.cyberciti.biz/guide/Main_Page http://www.tldp.org/LDP/Bash-Beginners-Guide/html/ind ...
- 全宇宙最全的bash 脚本常见用法总结!
shopt -s extdebugf()(printf '%s\n' "${BASH_ARGV[@]}"); f "$@" shopt -u extdebug ...
- 第十一章 认识与学习BASH【鸟哥linux私房菜学习笔记】
认识与学习BASH 一.认识bash这个shell (一)bash shell 的功能 1.history指令 默认的命令记忆功能为1000条命令.本次登录过程中使用的命令保存在内存中,之前登录的命令 ...
- 初学者编写bash脚本教程
初学者编写bash脚本教程 bash shell script 定义 bash bash是命令语言解释器.广泛用于各种gun/unix系统上的默认命令解释器.全程叫做"Bourne-Agai ...
- ansible常用模块之script模块和cron模块(十)
1.script模块 语法格式 ansible backup -m script -a "脚本" 直接写脚本路径即可 案例:安装rsync 1.写脚本 [root@ansible ...
- linux下bash脚本常用的十个技巧:显示执行脚本花费的时间,在脚本退出时杀死后台运行的程序,在脚本退出时跳出循环,读取命令行参数来决定循环次数
文章目录 1.显示执行脚本花费的时间 2.在脚本退出时杀死后台运行的程序 3.在脚本退出时跳出循环 4.读取命令行参数来决定循环次数 1.显示执行脚本花费的时间 网址:bash - How to ge ...
最新文章
- Linux中which命令作用,【每天一个Linux命令】12. Linux中which命令的用法
- 【干货】五天,谷歌如何制作一款App?
- day10T1改错记
- 面试题 gety() getTop() TranslationY关系
- 二开版彩虹易支付全开源10套模板带风控实名系统源码
- oracle call 存储过程 带out_详解oracle数据库存储过程调试方法
- 简明python教程-简明Python教程-中文版.pdf
- C:矩形相交、相包含、相离关系判断
- HDU 2674 N!Again
- MCGS组态屏CRC16(Modbus)校验计算脚本
- jquery Ajax回调函数
- android系统已停止运用,安卓系统平板电脑启动器停止运行处理方法(文/明)
- html使用对话框接收密码,Excel黑科技 vba中用Inputbox对话框接受输入密码时显示为*...
- 基于Linux的FTP文件传输项目(类似百度云)
- 麦克风有电流声怎么办?
- PC端如何下载B站里面的视频?
- edge播放视频HTML5黑屏,Win10 edge浏览器播放视频黑屏解决方法
- 基于MATLABCPLEX 的机组最优组合,成功求解表格化,图示化的机组组合结果(学习参考)
- 60级高阶督军套装属性_魔兽世界怀旧服指南:60年代法师套装的选择解析
- 卡特兰数 相关问题 hdu 5184 Brackets
热门文章
- 【论文解读】文本分类上分利器:Bert微调trick大全
- MySQL8.0超细致下载安装教程
- html5 模仿语音聊天气泡,HTML5实现对话气泡动画方法
- 门户通专访爱思网创始人韩笑:SNS网站必然走向实用化!
- 狂妄之人怎么用计算机弹,天谕手游狂妄之人乐谱代码分享
- cesium 实现地形挖洞的拖动效果
- 客户协作 over 合同谈判
- 樊登读书会终身成长读后感_《终身成长》读书笔记
- 【论文解读IJCAI 2019】Extracting Entities and Events as a Single Task Using a Transition-Based NeuralModel
- 华三防火墙远程telnet登录设置