实用shell脚本集合一(含常用正则表达式)

常用正则表达式

    匹配任意IP地址(未匹配掩码)
    '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

    匹配私网ip地址

    获取linux公网ip地址
root@sj-vps:~# ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\." | head -n 1
104.168.102.10

1、校验指定目录下文件的md5值(含隐藏文件)

#!/bin/bash

# 只需要将变量改成您指定的目录即可
DIR="/root"

# 递归遍历指定目录下的所有目录和文件,并计算md5值
# find "$DIR" -type f  -o -type d | while read -r path   若是使用这行,则会将空目录也打印出来
find "$DIR" -type f  | while read -r path
  do
    # 计算文件或目录的MD5值
    md5=$(md5sum "$path" | awk '{ print $1 }')

    # 输出MD5值和文件路径
    echo "MD5: $md5, Path: $path"
  done

2、打印linux网卡的ip和状态信息

脚本内容区域,注意应用了grep的高级用法,以及多行结果转换为数组+数组的应用
注意:该脚本不适用一张网卡多个ip的情况
#!/bin/bash
#set -x
result=$(ip a | grep -Po '(?<=: ).*(?=:)' | grep -v lo)
net_list=($result)
num=1
    echo "当前服务器的网卡信息如下:"
    echo "+-----------------------------------------------------------------------------------------+"
    echo "| 序号 | 网卡名     | IPv4地址                | IPv6地址                       | 状态     |"
    echo "+=========================================================================================+"

for netinterface in ${net_list[@]}
do
    netinterface=$(echo $netinterface | awk -F'@' '{print $1}')     # 修正写法,防止网卡名称中带有@字符,导致ip a show 网卡名失效
    ipv4_address=$(ip a show $netinterface | grep -Po '(?<=inet ).*' | awk -F' ' '{print $1}')
    # ipv4_address=$(ip a show $netinterface | grep -Po '(?<=inet ).*(?=\ brd|peer)')  这是另外一种匹配
    ipv6_address=$(ip a show $netinterface | grep -Po '(?<=inet6 ).*' | awk -F' ' '{print $1}')
    net_state=$(ip a show $netinterface | grep -Po '(?<=state ).*(?= group)')
    [[ -z "$ipv4_address" ]] && ipv4_address=NULL
    [[ -z "$ipv6_address" ]] && ipv6_address=NULL
    printf "| %-5s| %-11s| %-24s| %-31s| %-9s|\n"  $num $netinterface $ipv4_address $ipv6_address $net_state
    echo "+-----------------------------------------------------------------------------------------+"
    let num++
done

执行结果区域
root@sj-vps:~# ./test.sh 
当前服务器的网卡信息如下:
+-----------------------------------------------------------------------------------------+
| 序号 | 网卡名     | IPv4地址                | IPv6地址                       | 状态     |
+=========================================================================================+
| 1    | eth0       | 104.168.102.10/24       | fe80::216:3cff:fedb:e649/64    | UP       |
+-----------------------------------------------------------------------------------------+
| 2    | cq_to_sj   | 192.168.254.2           | NULL                           | UNKNOWN  |
+-----------------------------------------------------------------------------------------+
| 3    | docker0    | 172.17.0.1/16           | NULL                           | DOWN     |
+-----------------------------------------------------------------------------------------+

2、linux查看cpu相关信息

#!/bin/bash

#查看物理cpu颗数
cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l

#查看逻辑cpu个数(线程数)
cat /proc/cpuinfo |grep "processor"|wc -l

#查看cpu核心数
cat /proc/cpuinfo |grep "cores"|uniq

#查看cpu主频
cat /proc/cpuinfo |grep MHz|uniq

#查看cpu型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

#查看当前cpu工作在32/64位的模式下,若是32,不代表其不支持64位
getconf LONG_BIT

#查看当前cpu是否支持64位计算(结果大于0,说明支持64位)
cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l

#查看机器型号
dmidecode | grep "Product Name"

#查看cpu是否支持虚拟化
cat /proc/cpuinfo | grep -E '(vmx|svm)'

#查看详细的cpu信息
#cat /proc/cpuinfo

#简单查看cpu信息
#lscpu
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/1144.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2023/5/30作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录