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

执行结果:

img

知识点:

  • 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. 编写脚本,检查指定目录下的所有文件和目录,是否满足特定条件

例如需要满足以下条件:

  1. 所有文件权限为644
  2. 所有目录权限为755
  3. 文件和目录的所有者为指定人
  4. 文件和目录的所属组为指定组

如果不满上述条件,需要修改权限使其满足

posted @ 2023-09-29 22:33  Alpha205  阅读(7)  评论(0编辑  收藏  举报