【shell脚本练习——判断文件是否存在、批量创建有规律用户并设置密码、判断文件大小并更改路径位置】

shell脚本练习

  • 练习要求:
    • 练习一:判断文件是否存在
    • 练习二 :批量创建有规律用户并设置密码
      • 随机字符部分内容解释 :
    • 练习三:判断文件大小并更改路径位置

练习要求:

  1. shell 脚本写出检测/tmp/size.log文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入
  2. 写一个 shell 脚本,实现批量添加 20个用户,用户名为user 01-20,密码为user 后面跟5个随机字符
  3. 编写个shell 脚本将/usr/local目录下大于10M的文件转移到/tmp目录下

练习一:判断文件是否存在

  1. shell 脚本写出检测/tmp/size.log文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入

    #!/bin/bash
    filename="/tmp/size.log"
    
    read -p "请输入要查询的文件,默认为(/tmp/size.log):" user_input
    
    if [ -n "$user_input" ]; then
        filename="$user_input"
    fi
    
    echo"检测的目标文件为:$filename"
    if [ -e $filenamec ]
    then
            echo "该文件存在,文件内容为:"
            cat $filename
    else
            echo "该文件不存在,即将创建并写入时间"
            touch "$filename"
            echo $(date)>>$filename
    fi
    

练习二 :批量创建有规律用户并设置密码

  1. 写一个 shell 脚本,实现批量添加 20个用户,用户名为user 01-20,密码为user 后面跟5个随机字符

    #!/bin/bash
    for((num=1;num<=20;num++));do
            if ((num < 10));then
                    usernum=0$num
            else
                    usernum=$num
            fi
    
            if ! id user$usernum &>/dev/null
            then
                    password=$(</dev/urandom tr -dc 'A-Za-z0-9' | head -c 5)
                    useradd user$usernum
                    echo "user$password" | passwd --stdin user$usernum &>/dev/null
            else
                    echo "用户user$usernum已存在" 
            fi
    
    done
    

随机字符部分内容解释 :

- 关于获取5个随机字符部分的解释
     # 使用 $RANDOM 和字符集生成随机字符
     random_chars=$(< /dev/urandom tr -dc 'A-Za-z0-9' | head -c 5)
    这个方法的目的是从随机数据中生成一个由字母(大小写)和数字组成的 5 个字符的字符串。
    该方法结合了 `/dev/urandom`、`tr` 和 `head` 等工具。
  1. /dev/urandom
    /dev/urandom 是一个特殊的文件,提供伪随机数生成器。通过从 /dev/urandom 读取数据,可以获得随机字节流。
        < /dev/urandom
	这部分表示从 `/dev/urandom` 文件中读取数据,并将其传递给后续命令(通过管道)
  1. tr -dc 'A-Za-z0-9'

    • tr 命令用于转换和删除字符,参数 -dc 表示:
    • -d:删除字符。
    • -c:表示取“补集”,即对所有不在 A-Za-z0-9 中的字符进行删除。
    • 所以,tr -dc 'A-Za-z0-9' 的作用是 删除所有非字母和非数字的字符,即过滤掉所有不在字母和数字范围内的字符。
    • 例如,如果 /dev/urandom 中生成了一些非字母数字的字符(如 @# 等符号),它们会被 tr 删除,只保留字母和数字。
  2. head -c 5

    • head 命令用于从输入数据中提取前 N 行或前 N 字节。
    • -c 5:表示仅获取输入数据的前 5 个字节。
    • 因此,head -c 5 将会从过滤后的随机字节流中提取前 5 个字符。

这种方法适合用于生成字母和数字混合的随机字符,而不包含任何其他符号或特殊字符。

练习三:判断文件大小并更改路径位置

  • 编写个shell 脚本将/usr/local目录下大于10M的文件转移到/tmp目录下

    #!/bin/bash
    
    # 定义源目录和目标目录
    SOURCE_DIR="/usr/local"
    TARGET_DIR="/tmp"
    
    # 检查目标目录是否存在,不存在则创建
    if [ ! -d "$TARGET_DIR" ]; then
        echo "目标目录 $TARGET_DIR 不存在,正在创建..."
        mkdir -pv "$TARGET_DIR"
    fi
    
    # 查找并移动大于 10MB 的文件
    find "$SOURCE_DIR" -type f -size +10M | while read file; do
        echo "正在移动文件: $file"
        mv "$file" "$TARGET_DIR"
    done
    
    echo "所有大于 10MB 的文件已移动到 $TARGET_DIR"
    

    较为简洁的写法:

    find /user/local -size +10M -exec mv {} /tmp/ \;^c
    

你可能感兴趣的:(练习,RHCE,linux,运维)