用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

3、统计没有提交作业的学生名单

#!/bin/bash

cat  学号.txt | while read line
do
    num=`echo $line | awk '{print $1}'`
    name=`echo $line | awk '{print $2}'`
    count=`find ./第四次作业 -maxdepth 1  -name "*${num}*" -print | wc -l`
    echo $count
    if [ $count -eq 2 ]; then
        echo "$num $name" >> statistic.txt
    fi
done

 

遇到的问题

1、shell脚本中变量赋值的问题。“=”两边注意不能有空格。

2、在“学生名单.txt”文件中,只有学号字段情况下,num变量无法取到值。这个问题还不知道原因。

3、find 搜索的深度通过设置-maxdepth 2 可以进行控制。

其实,在写shell脚本时遇到好多问题,主要是对awk,find等命令不熟悉所致。

参考资料

在写这个小程序时,从网上查到许多资料,链接如下:

1、Linux Grep命令使用的详细介绍

http://bbs.chinaunix.net/viewthread.php?tid=1687220&extra=page%3D1&ordertype=2

2、shell 之find

http://hi.chinaunix.net/?uid-17159383-action-viewspace-itemid-19670#xspace-itemreply

3、BASH 中的字符串处理

http://bbs.chinaunix.net/viewthread.php?tid=201843&extra=page%3D1&ordertype=2

4、IF条件判断,判断条件

http://apps.hi.baidu.com/share/detail/30111172

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值