编写一个脚本,为您当前的学期创建文件夹层次结构。您的脚本应该执行以下操作:
- 创建一个变量来保存当前学期名称“Spring2021”。
- 创建一个包含本学期课程的数组。
- 创建一个数组,其中包含将为每门课程创建的文件夹:Slides、TMA、F-THE、essayQuiz。
- 创建一个执行以下操作的函数:接受三个变量:第一个是字符串,第二个和第三个是数组。 (5 分) B.创建以下文件夹层次结构:
MY Code
#!/bin/bash
semester="spring2021"
courses=( "m109" "m105" )
folders=( "tma" "essayquiz" "fthe")
create() {
echo mkdir $1
echo cd $1
for i in "${2}"
do
echo mkdir -p $i
echo cd $i
for j in "${3}"
do
echo mkdir $j
done
echo` cd ..`
echocd ..
done
}
create $semester ${courses[@]} ${folders[@]}
答案1
您必须知道如何将数组传递到函数中。您当前使用的方法并没有达到您的预期。$4
会等于,tma
而是尝试通过使用local -n
和设置与将传递给函数的变量不同的名称来声明变量。我相信只要您使用 bash4.3 或更高版本,这将适用。通过使用,local -n
您将能够按照您期望的方式设置变量。
#! /bin/bash
semester="spring2021"
courses=( "m109" "m105" )
folders=( "tma" "essayquiz" "fthe")
create() {
local -n _semester=$1
local -n _courses=$2
local -n _folders=$3
for i in "${_courses[@]}"
do
for j in "${_folders[@]}"
do
mkdir -p "$_semester/$i/$j"
done
done
}
create semester courses folders
请记住,还有其他方法可以完成您在这里尝试做的事情。虽然我不是 bash 专家,所以我只是按照你的脚本风格进行改进,这就是最终结果。我相信这可以在没有 for 循环的情况下完成,尽管我不知道如何做到这一点。
此外,在将脚本发布到此处之前检查它始终是一个好习惯。我个人使用外壳检查效果很好。