【发布时间】:2022-01-25 08:18:19
【问题描述】:
我有一个名为 students_projects 的文件夹,其中包含 10 个子文件夹。每个子文件夹都有 project1.c 和 project2.c,每个都打印一个值。我制作了一个 bash 脚本函数来检查这些数字并将它们保存到一个 txt 文件中。我在桌面而不是文件夹中使用名为 project1 和 project2 的 2 个 .c 文件对其进行了测试。我确保我工作正常,但是当我为所有子文件夹运行它时,它一直保存桌面文件中的值。
我的功能:
function test () {
gcc project1.c
p1=$(./a.out)
if (( $p1 == 20 ));
then
v1=30
else
v1=0
fi
gcc project2.c
p2=$(./a.out)
if (($p2 == 10 ));
then
v2=70
else
v2=0
fi
sum=$(( $v1 + $v2 ))
on="cut -d' ' -f1 report.txt"
onoma=$(eval "$on")
temp="cut -d' ' -f2 report.txt"
am=$(eval "$temp")
printf "$onoma $am project1: $v1 project2: $v2 total_grade: $sum\n" >> grades.txt
}
那我做
for FILE in students_projects/* ; do
test
done
【问题讨论】:
-
您在函数外部使用的循环 (
for FILE in students_projects/* ; do) 仅将变量FILE设置为与您的全局匹配的文件名 (students_projects/*);但是您似乎从未使用过该变量。我的猜测是你要么期望你的循环切换到目录(在这种情况下你缺少cd "${FILE}";,或者你想在你的函数中使用${FILE}作为大多数文件名的前缀(例如@987654328 @ 和其他人)。 -
我还要补充一点,建议对诸如此类的脚本使用
find实用程序(尽管这不一定与这里的问题有关)。 -
这里不需要使用
cut和eval。您可以使用set -- $var禁用 globbing (set -f) 或使用read -ra array <<< "$var"。 -
test是 linux 上的现有命令,您不应该在函数中使用该名称。