MST

星途 面试题库

面试题:Bash脚本复杂逻辑与自动化测试框架运用

假设你有一个Bash脚本,它用于处理一个包含多个文件路径的文本文件,脚本需要遍历这些路径,判断每个路径是否为目录,如果是目录,则统计目录下文件的数量,并将结果输出到一个新文件中。要求:1. 编写这个Bash脚本。2. 使用一个常见的自动化测试框架(如bats)为该脚本编写测试用例,以确保脚本在不同情况下都能正确运行。
10.3万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

Bash脚本

#!/bin/bash

input_file="$1"
output_file="$2"

> "$output_file"  # 清空输出文件

while read -r path; do
    if [ -d "$path" ]; then
        file_count=$(ls -1 "$path" | wc -l)
        echo "$path: $file_count" >> "$output_file"
    fi
done < "$input_file"

Bats测试用例

首先安装bats,在Debian或Ubuntu系统上可以使用sudo apt install bats安装。

创建测试文件test_script.bats

#!/usr/bin/env bats

setup() {
    # 创建临时输入文件和输出文件
    input_file=$(mktemp)
    output_file=$(mktemp)
    # 创建测试目录和文件
    mkdir -p test_dir
    touch test_dir/file1 test_dir/file2
    echo "test_dir" > "$input_file"
}

teardown() {
    # 删除临时文件和目录
    rm -f "$input_file" "$output_file"
    rm -rf test_dir
}

@test "目录存在且文件统计正确" {
    run bash your_script.sh "$input_file" "$output_file"
    expected="test_dir: 2"
    grep -q "$expected" "$output_file"
    [ "$status" -eq 0 ]
}

@test "非目录路径处理" {
    echo "not_a_dir" >> "$input_file"
    run bash your_script.sh "$input_file" "$output_file"
    refute grep -q "not_a_dir" "$output_file"
    [ "$status" -eq 0 ]
}

注意将上述your_script.sh替换为实际脚本文件名。运行测试时执行bats test_script.bats