1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
| #!/bin/bash
# 简单学生成绩管理系统
# -- linux 系统课程作业
# -- By llZero
# -- 2020年11月
# final
_TRUE=1
_FALSE=0
# 数据文件名称
DATA_FILE_NAME='student.txt'
# 判断数据格式是否符合要求
function fun_test_data_format {
if test 1 -eq `echo $1|grep -c -e '^[0-9]\{5\}:[^:]\{1,\}:[男女]:[^:]\{1,\}$'`
then
return $_TRUE
fi
return $_FALSE
}
# 个性化输出
function echo_erro {
echo -e "\033[31m $1 \033[0m"
}
function echo_info {
echo $1
}
# 打印帮助
function fun_show_help {
echo_info '[1].-h [num]将显示前num行数据'
echo_info '[2].-t [num]将显示后num行数据'
echo_info '[3].-o num按学号升序排序输出,-o dep按系别排序'
echo_info '[4].-a 追加内容,存在则输出'
echo_info '[5].-d 删除数据'
echo_info '[6].-s 查看信息'
echo_info '[7].--help 打印帮助'
echo_info '**如需打印所有信息,则无需加任何选项'
}
# 判断数据文件是否存在
# 存在则判断数据文件的正确性
# 不存在则会初始化一个文件
if [ -f $DATA_FILE_NAME ]
then
for line in `cat $DATA_FILE_NAME`
do
fun_test_data_format $line
if test $_TRUE -ne $?
then
echo_erro '已存在的数据格式不正确,建议删除已有的错误文件!'
exit
fi
done
else
echo_info '数据文件不存在,自动创建'
echo '00101:张三:男:计算机' > $DATA_FILE_NAME
fi
# 功能选择
case $1 in
'-h')
if test -z "$2"
then
head $DATA_FILE_NAME
else
head -n $2 $DATA_FILE_NAME
fi
;;
'-t')
if test -z "$2"
then
tail $DATA_FILE_NAME
else
tail -n $2 $DATA_FILE_NAME
fi
;;
'-o')
if test $2 == 'num'
then
sort --field-separator=":" --key=1 $DATA_FILE_NAME
else
sort --field-separator=":" --key=4 $DATA_FILE_NAME
fi
;;
'-a')
if test -n "$2"
then
student_id=`echo $2|cut -d ':' -f 1`
if test 1 -eq `grep -c -e "^$student_id:" $DATA_FILE_NAME`
then
echo_info '学生已存在!!'
echo_info `grep -m 1 -e "^$student_id:" $DATA_FILE_NAME`
else
fun_test_data_format $2
if test $_TRUE -eq $?
then
echo $2 >> $DATA_FILE_NAME
else
echo_erro '输入的学生信息格式不符合要求!'
fi
fi
else
echo_erro '信息不完整'
fi
;;
'-d')
if test -n "$2"
then
if test 1 -eq `grep -c -e "^$2:" $DATA_FILE_NAME`
then
read -p '是否确定删除[y/n]:' input
if test $input == 'yes' -o $input == 'y'
then
sed -i "/^$2:/g" $DATA_FILE_NAME
fi
else
echo_erro '学生信息不存在'
fi
else
echo_erro '缺少学号'
fi
;;
'-s')
if test -n "$2"
then
if test 1 -eq `grep -c -e "^$2:" $DATA_FILE_NAME`
then
echo_info `grep -m 1 -e "^$2:" $DATA_FILE_NAME`
else
echo_erro '学生信息不存在'
fi
else
echo_erro '缺少学号'
fi
;;
'--help')
fun_show_help
;;
'')
cat $DATA_FILE_NAME
;;
*)
echo_erro '参数选项错误,--help查看帮助'
echo_info '------------------------------'
fun_show_help
;;
esac
|