用Shell程序解决自己的需求
由于助教工作的需要,需要把先前收到的学生的作业重新组织下。考虑到学生作业多,若要纯手工操作,会是件相当麻烦的事情,于是决定写个shell脚本来解决这个问题。此前shell基本没用过,仅仅用了十来行代码,但还是花了我一天多的时间。虽然如此,觉得还是蛮有成就感,毕竟印象中这还是第一次自己写程序解决自己遇到的问题。
需求描述
有一百个学生,每个学生交了三次作业。第N次作业存放在命名为第N次作业的文件夹中,共有三个文件夹,分别是第一次作业,第二次作业,第三次作业。学生的作业以学号_姓名_第N次作业命名。现在要把学生的三次作业均存在以其学号命名的文件夹里。假设学生的学号为2011001,那么就需要创建一个以2011001命名的文件夹,然后把这个学生的三次作业全部转存到这个文件夹里。其他学生,以此类推。
需求解决方法
1、用shell脚本创建以学号命名的文件夹。
#!/bin/sh
cat 学生名单.txt | while read line
do
echo $line
num=`echo $line | awk '{print $1}'` # 学生名单文件中每行的第一个字段是学号
mkdir "../新的作业目录/$num"
done
2、用shell脚本转移学生的作业(作业文件或作业目录)。
#!/bin/bash
cat 学生名单.txt | while read line
do
num=`echo $line | awk '{print $1}'`
echo $num
# read num
find .\ -maxdepth 2 -name "*${num}*" -print -exec mv {} ../新的作业目录/${num} \;
done
遇到的问题
1、shell脚本中变量赋值的问题。“=”两边注意不能有空格。
2、在“学生名单.txt”文件中,只有学号字段情况下,num变量无法取到值。这个问题还不知道原因。
3、find 搜索的深度通过设置-maxdepth 2 可以进行控制。
其实,在写shell脚本时遇到好多问题,主要是对awk,find等命令不熟悉所致。
参考资料
在写这个小程序时,从网上查到许多资料,链接如下: