shell 脚本基础练习

  1. 编写脚本 sysinfo.sh,显示当前主机系统信息,包括:主机名,IPv4地址,操作系统版本,内核版 本,CPU型号,内存大小,硬盘大小

tr命令用于替换或删除字符。

cut命令用于从文件或标准输入中提取列

[root@admin ~]# vim sysinfo.sh 
echo  -e  "hostname  \c"    // -e 解释转义字符 \c不换行下一个命令的结果会接着这一行输出
hostname                 //主机名
echo -e  "ip  \c"
ifconfig ens160 | grep mask | tr -s " " | awk -F " " '{print $2}'  
//tr  -s “ ” 把连续的空格压缩为单个空格
echo -e "os  \c"
cat /etc/redhat-release | awk -F " " '{printf $6}'
echo -e "kernel \c"
uname -a | awk -F " " '{print $3}'
echo    -e "cpu \c"
cat /proc/cpuinfo  | grep   "model name"  | cut -d " " -f4-  
//-d" "表示使用空格作为字段分隔符。-f4-表示提取从第4个字段开始直到结束。
echo -e "RAM \c "
free -h | grep ^Mem 
echo -e "disk size \c"
lsblk  | grep "^nvme0n1" | awk -F " " '{print$4}'

 2、编写脚本 backup.sh,可实现每日将 /etc/ 目录备份到 /backup/etcYYYY-mm-dd中

root@admin ~]# vim backup.sh 
dateback=$(date +%F)   //变量今天日期
back_dir="/backup/etc$dateback"     
mkdir -p $back_dir
tar -cvzf  "$back_dir/etc_backup_$dateback.tar.gz" /etc/
echo     "save a backup" 

sort用于对文本文件的行进行排序

  • -n:按数字顺序排序。

  • -r:反向排序(即从大到小或从 Z 到 A)。

  • -f:忽略大小写。

  • -k:按指定字段排序。

  • -t:指定字段分隔符。

  • -u:去除重复行。

3、编写脚本 disk.sh,显示当前硬盘分区中空间利用率最大的值

df -h | awk '$NF {print $5}' | sort -nr | head -n 1     

 4、 编写脚本 links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序

netstat -tn | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr

uniq 命令通常与 sort 命令结合使用,因为 uniq 需要输入数据是已排序的才能正确工作。

  • -c--count:在每行前加上该行在文件中出现的次数。

  • -d--repeated:仅显示重复的行。

  • -u--unique:仅显示不重复的行。

  • -i--ignore-case:在比较行时忽略大小写。

  • -f--skip-fields=N:忽略每行的前 N 个字段。

  • -s--skip-chars=N:忽略每行的前 N 个字符。

  • -w--check-chars=N:仅比较每行的前 N 个字符。

5、编写脚本 repo.sh ,搭建本地yum仓库,并安装软件测试

tar -czvf /repo.bak.tar.gz /etc/yum.repos.d/*   //备份
rm -rf /etc/yum.repos.d/*
mount /dev/sr0 /mnt/
touch /etc/yum.repos.d/server.repo
cat  >  /etc/yum.repos.d/server.repo  <<EOF
[aa]
name=a
baseurl=file:///mnt/AppStream
gpgcheck=0
enabled=1
[bb]
name=b
baseurl=file:///mnt/BaseOS
gpgcheck=0
enabled=1
EOF
yum clean all >> /dev/null && yum makecache  >>/dev/null
yum -y install net-tools

上一篇:Ubuntu 中如何高效的使用grep命令-参数和选项:


下一篇:如何在PostgreSQL中使用CTE(公共表表达式)来简化复杂的查询逻辑?-解决方案