一、基础脚本
1.1系统信息
显示当前主机系统信息,包括:主机名、IP地址、操作系统版本、内核版本、CPU、内存、硬盘
#vim system_info.sh
#!/bin/bash
RED="\E[1;31m"
GREEN="echo -e \E[1;32m"
END="\E[0m"
$GREEN---------------------Host systeminfo--------------------$END
echo -e "HOSTNAME: $RED`hostname`$END"
echo -e "IPADDR: $RED`ifconfig ethxxx|grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' |head -n1`$END"
echo -e "OSVERSION: $RED`cat /etc/redhat-release`$END"
echo -e "KERNEL: $RED`uname -r`$END"
echo -e "CPU: $RED`lscpu|grep 'Model name'|tr -s ' '|cut -d : -f2`$END"
echo -e "MEMORY: $RED`free -h|grep Mem|tr -s ' ' : |cut -d : -f2`$END"
echo -e "DISK: $RED`lsblk |grep '^sd' |tr -s ' '|cut -d " " -f4`$END"
$GREEN--------------------------------------------------------$END
[22:07:18 root@MarkDZ scripts]#bash systeminfo.sh
---------------------Host systeminfo---------------------------
HOSTNAME: MarkDZ
IPADDR: 10.0.0.1
OSVERSION: Rocky Linux release 8.6 (Green Obsidian)
KERNEL: 4.18.0-372.9.1.el8.x86_64
CPU: Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz
Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz
MEMORY: 1.8Gi
DISK: 200G
---------------------------------------------------------------
注:bash -n 检查语法错误;bash -x 观察命令错误、逻辑错误(只能使用bash -x)
1.2每日目录备份
每日将 /etc/目录备份到/backup/etcYYYY-MM-DD中
#vim backup.sh
#!/bin/bash
COLOR='echo -e \E[1;35m'
END='\E[0m'
BACKUP=/backup
SRC=/etc
DATE=`date +%F`
${COLOR}Starting backup...$END
sleep 2
cp -a $SRC ${BACKUP}${SRC}_$DATE
${COLOR}Backup is finished$END
[22:04:14 root@zhao scripts]#bash backup.sh
Starting backup...
Backup is finished
[22:06:03 root@zhao scripts]#ls -lh /backup/
total 8.0K
drwxr-xr-x. 77 root root 4.0K Feb 22 21:56 etc_2024-02-22
1.3硬盘空间利用率
显示当前硬盘分区中空间利用率最大的值
#vim disk.sh
#!/bin/bash
max_disk_usage=$(df | grep -E "[0-9]{1,3}%" | awk '{print $5}' | tr -d "%" | sort -nr | head -n 1)
echo "硬盘分区中空间利用率最大值为:$max_disk_usage%"
[22:23:43 root@MarkDZ scripts]#. disk.sh
硬盘分区中空间利用率最大值为:21%
1.4远程主机连接数
显示正连接本主机的每个远程主机的IP和连接数,并将连接数从大到小排序
#vim links.sh
#!/bin/bash
w -h | tr -s " " |cut -d " " -f 3 | sort | uniq -c | sort -nr
[22:28:03 root@MarkDZ scripts]#bash links.sh
1 10.0.0.152
1 10.0.0.1
二、进阶脚本
2.1以文件路径作为参数
接受一个文件路径作为参数;如果参数个数小于1,则提示用户”至少应该给一个参数“,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数。
#vim argsnum.sh
#!/bin/bash
if [ $# -lt 1 ]; then
echo "请至少应该给一个参数"
exit
elif [ $# -ge 1 ]; then
file_path="$1"
if [ -f "$file_path" ]; then
lines=$(grep "^$" -c "$file_path")
echo "文件 $file_path 中的空白行数为:$lines"
else
echo "请输入有效的文件路径"
fi
fi
[22:37:38 root@MarkDZ scripts]#bash argsnum.sh
请至少应该给一个参数
[22:37:43 root@MarkDZ scripts]#bash argsnum.sh 10.0.0.151
请输入有效的文件路径
[22:38:36 root@MarkDZ scripts]#bash argsnum.sh /data/test.txt
文件 /data/test.txt 中的空白行数为:0
2.2以主机IP作为参数
接受一个主机的IP地址作为参数,测试是否可连通;如果能ping通,则提示用户"该IP地址可访问";如果ping不通,则提示用户”该IP地址不可访问“。
#vim hostping.sh
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "请输入一个参数"
fi
ipv4="$1"
ping -c 4 "$ipv4" > /dev/null
exit_code=$?
if [ "$exit_code" -eq 0 ]; then
echo "该IP地址可访问"
else
echo "该IP地址不可访问"
fi
[22:42:07 root@MarkDZ scripts]#bash hostping.sh
请输入一个参数
ping: : Name or service not known
该IP地址不可访问
[22:42:18 root@MarkDZ scripts]#bash hostping.sh 10.0.0.151
该IP地址可访问
2.3检查磁盘分区空间
检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满
#vim checkdisk.sh
#!/bin/bash
disk_usage=$(df | egrep -o "[0-9]{1,3}%" | tr -d "%" | sort -nr | head -n 1)
if [ $disk_usage -ge 80 ]; then
wall "警告!当前磁盘空间将满"
fi
inode_usage=$(df -i | egrep -o "[0-9]{1,3}%" | tr -d "%" | sort -nr | head -n 1)
if [ $inode_usage -ge 80 ]; then
wall "警告!当前inode的使用率已经超过80%"
fi
2.4指定参数文件是否读写
判断当前用户对指定参数文件,是否不可读并且不可写
#vim per.sh
#!/bin/bash
function check() {
if [ $# -ne 1 ]; then
echo "请输入一个参数!"
exit
fi
local file="$1"
if [ -f "$file" ]; then
local perm
perm=$(ls -l "$file" | cut -d " " -f 1)
local read
read=$(echo "$perm" | cut -c 2)
local write
write=$(echo "$perm" | cut -c 3)
if [ "$read" != "r" -a "$write" != "w" ]; then
echo
echo "当前用户对于文件$file具有不可读并且不可写权限!"
echo
exit
else
echo
echo "当前用户对于文件$file具有可读或可写权限
echo
exit
fi
else
echo
echo "$file不是一个文件!"
echo
exit
fi
}
function main() {
check "$1"
}
main "$1"
[23:09:17 root@MarkDZ ~]#bash /data/scripts/per.sh test.txt
/data/scripts/per.sh: line 3: [: missing `]'
当前用户对于文件test.txt具有可读或可写权限
2.5指定后缀的普通文件权限
判断参数文件是否为sh后缀的普通文件,如果是,添加所有可执行权限,否则提示用户非脚本文件
#vim excute.sh
#!/bin/bash
read -p "请输入参数文件:" FILE
[ -f $FILE ] && [[ "$FILE" == *.sh ]] && chmod +x $FILE || echo “非脚本文件”
2.6允许或禁止普通用户登录系统
实现禁止或允许普通用户登录系统
#vim nologin.sh
#!/bin/bash
[ -f /etc/nologin ] && echo "已禁止普通用户登录" || { touch /etc/nologin;echo "已开启禁止普通用户登录"; }
#vim login.sh
#!/bin/bash
[ -f /etc/nologin ] && { rm -f /etc/nologin ; echo "已开启普通用户登录"; } || echo "已允许普通用户登录"