MST

星途 面试题库

面试题:复杂Bash Shell脚本风格与规范综合考察

假设你正在编写一个用于系统管理的复杂Bash Shell脚本,该脚本需要实现用户管理(添加、删除用户)、权限设置以及日志记录功能。请按照业界最佳的Shell脚本风格与规范来编写这个脚本,包括但不限于函数封装、变量作用域控制、代码模块化、异常处理以及脚本可维护性和可读性的优化等方面。
47.0万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

# 定义日志文件路径
LOG_FILE="/var/log/sysadmin_script.log"

# 函数:记录日志
log_message() {
    local message="$1"
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" >> "$LOG_FILE"
}

# 函数:添加用户
add_user() {
    local username="$1"
    if id "$username" &>/dev/null; then
        log_message "用户 $username 已存在"
        echo "用户 $username 已存在"
    else
        useradd "$username"
        if [ $? -eq 0 ]; then
            log_message "成功添加用户 $username"
            echo "成功添加用户 $username"
        else
            log_message "添加用户 $username 失败"
            echo "添加用户 $username 失败"
        fi
    }
}

# 函数:删除用户
delete_user() {
    local username="$1"
    if id "$username" &>/dev/null; then
        userdel -r "$username"
        if [ $? -eq 0 ]; then
            log_message "成功删除用户 $username"
            echo "成功删除用户 $username"
        else
            log_message "删除用户 $username 失败"
            echo "删除用户 $username 失败"
        fi
    else
        log_message "用户 $username 不存在"
        echo "用户 $username 不存在"
    }
}

# 函数:设置用户权限
set_permissions() {
    local username="$1"
    local file_path="$2"
    local permissions="$3"
    if id "$username" &>/dev/null; then
        chown "$username":"$username" "$file_path"
        chmod "$permissions" "$file_path"
        if [ $? -eq 0 ]; then
            log_message "成功为用户 $username 设置文件 $file_path 的权限为 $permissions"
            echo "成功为用户 $username 设置文件 $file_path 的权限为 $permissions"
        else
            log_message "为用户 $username 设置文件 $file_path 的权限失败"
            echo "为用户 $username 设置文件 $file_path 的权限失败"
        fi
    else
        log_message "用户 $username 不存在"
        echo "用户 $username 不存在"
    }
}

# 主程序
case "$1" in
    adduser)
        if [ -z "$2" ]; then
            echo "用法: $0 adduser <用户名>"
            log_message "缺少用户名参数"
        else
            add_user "$2"
        fi
        ;;
    deluser)
        if [ -z "$2" ]; then
            echo "用法: $0 deluser <用户名>"
            log_message "缺少用户名参数"
        else
            delete_user "$2"
        fi
        ;;
    setperm)
        if [ -z "$2" ] || [ -z "$3" ] || [ -z "$4" ]; then
            echo "用法: $0 setperm <用户名> <文件路径> <权限>"
            log_message "缺少用户名、文件路径或权限参数"
        else
            set_permissions "$2" "$3" "$4"
        fi
        ;;
    *)
        echo "用法: $0 (adduser|deluser|setperm) [参数]"
        log_message "无效的操作"
        ;;
esac