系统功能

查询当前系统信息

手动查询:

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/Linux

Ubuntu >> 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/Linux

i5os >> uname -a
Linux i5 3.14.18-ipipe #116 SMP PREEMPT Tue Nov 20 18:27:25 PST 2018 i686 i686 i686 GNU/Linux

Windows >> uname -a
MSYS_NT-6.1 N-SH-465 2.10.0(0.325/5/3) 2018-03-15 14:12 x86_64 Msys

Termux >> 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 应用案例相关推荐

  1. 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 ...

  2. 树莓派红外线报警c语言,【BASH SCRIPT】在树莓派上用HC-SR501红外感应器触发USB摄像头拍照...

    5-1假期闲的没事继续折腾树莓派.这次是尝试模拟一个防盗报警器,用HC-SR501 被动红外动作感应器 (Passive Infrared/PIR motion sensor)来触发USB camer ...

  3. Linux集群服务知识点总结及通过案例介绍如何实现高性能web服务

    转自:http://guodayong.blog.51cto.com/263451/1201101 一:集群相关概念及知识点介绍: LVS(Linux Virtual System) 本项目在1998 ...

  4. 最全的Linux运维bash脚本常见用法总结

    删除重复的数组元素 创建临时关联数组.设置关联数组 值并发生重复赋值时,bash会覆盖该键.这 允许我们有效地删除数组重复. CAVEAT:需要bash4+ 示例功能: remove_array_du ...

  5. Linux Bash常用的脚本工具整理

    参考: https://bash.cyberciti.biz/guide/Main_Page http://www.tldp.org/LDP/Bash-Beginners-Guide/html/ind ...

  6. 全宇宙最全的bash 脚本常见用法总结!

    shopt -s extdebugf()(printf '%s\n' "${BASH_ARGV[@]}"); f "$@" shopt -u extdebug ...

  7. 第十一章 认识与学习BASH【鸟哥linux私房菜学习笔记】

    认识与学习BASH 一.认识bash这个shell (一)bash shell 的功能 1.history指令 默认的命令记忆功能为1000条命令.本次登录过程中使用的命令保存在内存中,之前登录的命令 ...

  8. 初学者编写bash脚本教程

    初学者编写bash脚本教程 bash shell script 定义 bash bash是命令语言解释器.广泛用于各种gun/unix系统上的默认命令解释器.全程叫做"Bourne-Agai ...

  9. ansible常用模块之script模块和cron模块(十)

    1.script模块 语法格式 ansible backup -m script -a "脚本" 直接写脚本路径即可 案例:安装rsync 1.写脚本 [root@ansible ...

  10. linux下bash脚本常用的十个技巧:显示执行脚本花费的时间,在脚本退出时杀死后台运行的程序,在脚本退出时跳出循环,读取命令行参数来决定循环次数

    文章目录 1.显示执行脚本花费的时间 2.在脚本退出时杀死后台运行的程序 3.在脚本退出时跳出循环 4.读取命令行参数来决定循环次数 1.显示执行脚本花费的时间 网址:bash - How to ge ...

最新文章

  1. Linux中which命令作用,【每天一个Linux命令】12. Linux中which命令的用法
  2. 【干货】五天,谷歌如何制作一款App?
  3. day10T1改错记
  4. 面试题 gety() getTop() TranslationY关系
  5. 二开版彩虹易支付全开源10套模板带风控实名系统源码
  6. oracle call 存储过程 带out_详解oracle数据库存储过程调试方法
  7. 简明python教程-简明Python教程-中文版.pdf
  8. C:矩形相交、相包含、相离关系判断
  9. HDU 2674 N!Again
  10. MCGS组态屏CRC16(Modbus)校验计算脚本
  11. jquery Ajax回调函数
  12. android系统已停止运用,安卓系统平板电脑启动器停止运行处理方法(文/明)
  13. html使用对话框接收密码,Excel黑科技 vba中用Inputbox对话框接受输入密码时显示为*...
  14. 基于Linux的FTP文件传输项目(类似百度云)
  15. 麦克风有电流声怎么办?
  16. PC端如何下载B站里面的视频?
  17. edge播放视频HTML5黑屏,Win10 edge浏览器播放视频黑屏解决方法
  18. 基于MATLABCPLEX 的机组最优组合,成功求解表格化,图示化的机组组合结果(学习参考)
  19. 60级高阶督军套装属性_魔兽世界怀旧服指南:60年代法师套装的选择解析
  20. 卡特兰数 相关问题 hdu 5184 Brackets

热门文章

  1. 【论文解读】文本分类上分利器:Bert微调trick大全
  2. MySQL8.0超细致下载安装教程
  3. html5 模仿语音聊天气泡,HTML5实现对话气泡动画方法
  4. 门户通专访爱思网创始人韩笑:SNS网站必然走向实用化!
  5. 狂妄之人怎么用计算机弹,天谕手游狂妄之人乐谱代码分享
  6. cesium 实现地形挖洞的拖动效果
  7. 客户协作 over 合同谈判
  8. 樊登读书会终身成长读后感_《终身成长》读书笔记
  9. 【论文解读IJCAI 2019】Extracting Entities and Events as a Single Task Using a Transition-Based NeuralModel
  10. 华三防火墙远程telnet登录设置