Linux脚本扩展
《Linux脚本基础扩展》
在之前的!《Linuxshell脚本基础知识》中,介绍了编写脚本的基础语法知识;现根据B站教程,对脚本编写实践部分进行总结;
1. 编写脚本,遍历目录下的所有txt文件,且将文件做备份,备份的格式为源文件名后缀增加日期;如:a.txt备份为a.txt_20230122
#!bin/bash
#author: zhangsan
#version: 1.0.0
#date: 2023-09-29
# 定义后缀,反引号获取命令的执行结果
# 使用$()也可以获取命令执行的结果 $(date +%Y%m%d)
suffix=`date +%Y%m%d`
# find file
for f in `find ./data/ -type f -name "*.txt"`
do
echo "Back up file $f"
cp ${f} ${f}_${suffix}
done
代码执行结果:
知识点:
date
命令的用法,获取日期与时间for
循环遍历文件
2. 创建10个用户,并且为每个用户设置随机的密码,将用户名和密码记录到一个文件内
#!bin/bash
#author: zhangsan
#version: 1.0.0
#date: 2023-09-29
userData=/tmp/userinfo.txt
# 判断文件是否存在
if [ -f $userData ] ; then
echo "Remove file $userData"
rm -f $userData
fi
# mkpasswd
if ! which mkpasswd ; then
echo "command mkpasswd not exist, now start install."
# apt-get install expect
fi
# 使用seq产生序列
for i in `seq -w 0 09`
do
p=`date +%Y%m%d`
echo "user_${i} password:${p}" >> /tmp/userinfo.txt
done
执行结果:
知识点:
- seq 用于生成序列,可指定序列的起始终止,以及步长, -w参数表示生成等宽序列(Filled by leading zero)
seq 1 5
,seq 1 2 10
,seq -w 1 10
3. 编写脚本,检测本机的所有磁盘分区读写是否都正常
思路:Linux下,通过挂载机制将硬盘分区与文件目录联系起来;
- Windows: 先分物理地址,再在分区上建立目录
- Linux: 先有目录,再将物理地址映射到目录
为了检测所有分区读写是否正常,只需遍历系统中所有挂载点,检测挂载点是否正常即可;检测的方法为,如果可以在挂载点创建和删除测试文件,如果创建删除正常,则表示挂载点正常。
#!bin/bash
#author: zhangsan
#version: 1.0.0
#date: 2023-09-29
# 遍历系统中的文件挂载点
for mount_p in `df | sed '1d' | grep -v 'tmpfs' | awk '{print $NF}'`
do
echo Testing mount point ${mount_p}
# 创建且删除文件
sudo touch ${mount_p}/testfile && sudo rm -f ${mount_p}/testfile
if [ $? -ne 0 ] ; then
echo \"${mount_p}\" mount point has IO error.
else
echo \"${mount_p}\" mount point is normal.
fi
done
输出结果:
4. 编写脚本,检查指定目录下的所有文件和目录,是否满足特定条件
例如需要满足以下条件:
- 所有文件权限为644
- 所有目录权限为755
- 文件和目录的所有者为指定人
- 文件和目录的所属组为指定组
如果不满上述条件,需要修改权限使其满足