MST

星途 面试题库

面试题:Bash别名与函数:动态参数处理及复杂逻辑

编写一个Bash函数,该函数接受多个文件路径作为参数,首先检查每个文件是否存在且为普通文件,如果是,则根据文件扩展名进行分类处理:对于.txt文件,统计文件行数;对于.sh文件,检查文件是否有可执行权限,如果没有则添加可执行权限。在处理过程中,要使用适当的错误处理机制,确保即使部分文件处理出错,其他文件仍能继续处理。请详细解释你的代码逻辑和使用的关键Bash特性。
16.3万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
process_files() {
    for file in "$@"; do
        if [ -f "$file" ]; then
            case ${file##*.} in
                txt)
                    line_count=$(wc -l < "$file")
                    echo "File $file has $line_count lines."
                    ;;
                sh)
                    if [ ! -x "$file" ]; then
                        chmod +x "$file"
                        echo "Added executable permission to $file."
                    else
                        echo "File $file already has executable permission."
                    fi
                    ;;
                *)
                    echo "Unsupported file extension for $file."
                    ;;
            esac
        else
            echo "File $file does not exist or is not a regular file."
        fi
    done
}

代码逻辑解释

  1. 循环遍历参数:使用 for file in "$@" 遍历函数传入的所有文件路径参数。"$@" 会扩展为函数调用时传入的所有参数,确保每个参数都被正确处理。
  2. 检查文件是否存在且为普通文件if [ -f "$file" ] 用于判断 $file 是否存在且是普通文件。-f 是Bash的文件测试操作符,用于检查文件是否为普通文件。
  3. 根据文件扩展名分类处理
    • 使用 ${file##*.} 提取文件的扩展名。## 是Bash的字符串操作符,用于从变量值的末尾删除最长匹配模式。
    • 使用 case 语句根据扩展名进行分类:
      • .txt文件:使用 wc -l < "$file" 统计文件行数。wc -l 是用于统计行数的命令,< "$file" 是输入重定向,将文件内容作为 wc -l 的输入。
      • .sh文件:使用 if [ ! -x "$file" ] 检查文件是否有可执行权限,-x 是文件测试操作符,用于检查文件是否可执行。如果没有可执行权限,则使用 chmod +x "$file" 添加权限。
      • 其他扩展名:输出提示信息表示不支持该扩展名。
  4. 错误处理:如果文件不存在或不是普通文件,通过 echo 输出相应的错误信息,然后继续处理下一个文件,确保即使部分文件处理出错,其他文件仍能继续处理。

关键Bash特性

  1. 文件测试操作符:如 -f(检查普通文件)和 -x(检查可执行权限),这些操作符在文件处理和权限检查中非常有用。
  2. 字符串操作${file##*.} 用于提取文件扩展名,展示了Bash强大的字符串处理能力。
  3. case 语句:用于根据不同条件执行不同的代码块,提高代码的可读性和可维护性。
  4. 输入重定向< "$file" 将文件内容作为命令的输入,这里用于统计文件行数。
  5. 循环结构for 循环用于遍历多个文件路径参数,是处理多个相似任务的常用结构。