MST

星途 面试题库

面试题:Bash 文件测试在复杂场景中的应用

假设你在处理一个备份系统的Bash脚本,需要检查目标备份目录是否存在且可写,同时检查所有待备份文件是否存在且可读。若任何条件不满足,需详细记录不满足条件的文件或目录信息到日志文件中,并给出相应的处理策略。请写出完整的Bash脚本实现逻辑。
18.0万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

backup_dir="/path/to/backup/dir"
log_file="/path/to/logfile.log"
files_to_backup=("file1" "file2" "/path/to/file3") # 这里列出待备份文件路径

# 检查备份目录
if [ ! -d "$backup_dir" ]; then
    echo "$(date): 备份目录 $backup_dir 不存在" | tee -a $log_file
    # 处理策略:尝试创建目录
    mkdir -p "$backup_dir"
    if [ $? -eq 0 ]; then
        echo "$(date): 成功创建备份目录 $backup_dir" | tee -a $log_file
    else
        echo "$(date): 创建备份目录 $backup_dir 失败" | tee -a $log_file
    fi
elif [ ! -w "$backup_dir" ]; then
    echo "$(date): 备份目录 $backup_dir 不可写" | tee -a $log_file
    # 处理策略:尝试修改权限
    chmod +w "$backup_dir"
    if [ $? -eq 0 ]; then
        echo "$(date): 成功修改备份目录 $backup_dir 为可写" | tee -a $log_file
    else
        echo "$(date): 修改备份目录 $backup_dir 权限失败" | tee -a $log_file
    fi
fi

# 检查待备份文件
for file in "${files_to_backup[@]}"; do
    if [ ! -f "$file" ]; then
        echo "$(date): 文件 $file 不存在" | tee -a $log_file
        # 处理策略:根据具体情况决定是否跳过或终止
    elif [ ! -r "$file" ]; then
        echo "$(date): 文件 $file 不可读" | tee -a $log_file
        # 处理策略:尝试修改权限
        chmod +r "$file"
        if [ $? -eq 0 ]; then
            echo "$(date): 成功修改文件 $file 为可读" | tee -a $log_file
        else
            echo "$(date): 修改文件 $file 权限失败" | tee -a $log_file
        fi
    fi
done