Linux笔记 #08# shell编程从零开始到低配学生管理系统
先熟悉一下基本语法(运行环境是装git的时候一起装的那个windows下的bash):
#!/bin/bash # 实现两个函数
# appendToFile()追加一行到文件
# readFile()把文件中所有内容逐行写到控制台 echo "welcome to bash!"
echo 'welcome to bash!'
printf '%-5s %-10s %-4s\n' No Name Mark
printf '%-5s %-10s %-4.2f\n' Jack 20.012
# welcome to bash!
# welcome to bash!
# No Name Mark
# Jack 20.01 v='sads'
# v2 = 'dasdas'
# => v2: command not found(这是是一个错误示范)
echo v2 # => v2
echo $v # => sads
echo ${v} # => sads
echo 'hello, $v and ${v}' # => hello, $v and ${v}
echo "hello, $v and ${v}" # => hello, sads and sads echo ${#v} # => (字符串长度) let digit1=
let digit2=
let result=digit1+digit2
echo $result # => # echo "4 * 0.5" | bc echo "重定向到文本" > text.txt
echo "追加到目标文件" >> text.txt
# $ cat text.txt
# 重定向到文本
# 追加到目标文件 array[]='daasd'
array[]='asassd'
echo ${array[]} # => daasd
echo ${array[*]} # => daasd asassd
echo ${!array[*]} # => # $ sh -v linux.sh
# $ sh -x linux.sh 进行调试打印
function f() {
echo '接下来是f的输出:'
echo $
echo $
echo $@
echo $*
}
f 'hello' # 调用函数
# 接下来是f的输出:
#
# hello
# hello
# hello
FILENAME=student
appendToFile() {
# arg1: filename, arg2: content
echo $ >> $FILENAME
}
appendToFile "小张 25 未婚" readFile() {
while read LINE
do
echo $LINE
done < $FILENAME
}
echo 'invoke readFile:'
readFile
# invoke readFile:
# 小张 未婚
# 小张 未婚
再结合百度完成低配版的学生管理系统:
#!/bin/bash # 构造三个类似数据库的文本文件:
# 第一个为学院信息文件,包含字段:
# 学院编号(唯一),学院名称
# 第二个为学生信息文件,包含字段:
# 学号(唯一),学生姓名,所在学院编号,说明(休学suspended,退学dropout)
# 第三个为学生成绩文件,包含字段:
# 学号(唯一),学生姓名,科目名称,成绩;说明(期考final,补考makeup)
# 说明:每个记录占一行;分隔符可以自己选定,建议用”,”; 编码规则自己定;文件名自己定
# 程序功能:要求实现4个功能,每个功能作为一个函数
# 1.向文件中插入记录
# 2.显示文件中的每条记录的每个字段值
# 3.从文件中修改指定学号的记录
# 4.对学生成绩进行统计(包括每个学生总成绩;每个学科前3名和总成绩前5名统计) newFile() {
# arg1: filename
# 例子:newFile temp
touch :>$
} saveRecord() {
# arg1: filename, arg2: content
# 例子:saveRecord temp "小张 25 未婚"
echo $ >> $
} initTables() {
# 数据库文件初始化
# academy "academy_id,academy_name"
# student "stu_id,stu_name,academy_id,stu_description"
# subject "stu_id,stu_name,subject_name,score,subject_description"
newFile academy
newFile student
newFile subject
} updateStudentById() {
# arg1: 学号, arg2:新的记录
# 例子:updateStudentById '' '2132022129,李四,001,dropout'
oldStr=`grep $ student` # 把grep的执行结果赋给oldStr
newStr=$
sed -i "s/${oldStr}/${newStr}/" student
} echoTitle() {
echo '-------------------------------------------------------'
echo $
echo '-------------------------------------------------------'
} endl() {
echo -e '\n'
} listRecords() {
# arg1: data_filename
while read LINE
do
echo $LINE
done < $
} initRecords() {
# 学院信息
saveRecord academy "001,挪威阿克苏而达学院"
saveRecord academy "002,哈尔滨佛学院(简称哈佛)"
# 学生信息
saveRecord student "2132022129,张三,001,dropout"
saveRecord student "2132022139,李四,002,dropout"
saveRecord student "2132022149,王五,001,dropout"
saveRecord student "2132022159,老王,002,dropout"
saveRecord student "2132022119,张飞,001,suspended"
saveRecord student "2132022109,刘备,001,suspended"
saveRecord student "2132022179,关羽,002,suspended"
# linux成绩
saveRecord subject "2132022129,张三,linux,0,makeup"
saveRecord subject "2132022139,李四,linux,13.5,makeup"
saveRecord subject "2132022149,王五,linux,23.5,makeup"
saveRecord subject "2132022119,张飞,linux,99.5,makeup"
saveRecord subject "2132022109,刘备,linux,0,makeup"
saveRecord subject "2132022179,关羽,linux,100,final"
saveRecord subject "2132022159,老王,linux,43.5,makeup"
# math成绩
saveRecord subject "2132022129,张三,math,10,final"
saveRecord subject "2132022139,李四,math,23.5,final"
saveRecord subject "2132022149,王五,math,33.5,final"
saveRecord subject "2132022119,张飞,math,89.5,final"
saveRecord subject "2132022109,刘备,math,55,final"
saveRecord subject "2132022179,关羽,math,50,final"
saveRecord subject "2132022159,老王,math,93.5,final"
} totalScore() {
# arg1: 学号
# 打印某个学生的学号,姓名,总成绩
echo `awk -v stuId=$ -F, 'BEGIN{total=0} {if($1==stuId){total+=$4;name=$2}} END{print stuId,name,total}' OFS="," subject`
} subjectScore() {
# arg1: 学号, arg2: 科目名
# 打印某个学生的学号,姓名,单科成绩
pattern="^$1.*$2"
record=`grep -E $pattern subject`
echo $record
} sortByColumn() {
# arg1: 按第几列排,arg2: 需要排名的文件
sort -nrk $ -t, $
} topStudent() {
# 打印成绩排名,默认打印总成绩排名
# arg1: 科目名
newFile topStudent
if [ ! -n "$1" ] ;then
while read LINE
do
stuId=${LINE%%,*}
saveRecord topStudent `totalScore $stuId`
done < student echoTitle '**总成绩排名'
sortByColumn topStudent; endl
else
while read LINE
do
stuId=${LINE%%,*}
saveRecord topStudent `subjectScore $stuId $`
done < student echoTitle "**单科成绩排名>>>>$1<<<"
sortByColumn topStudent; endl
fi
} main() {
initTables
initRecords echoTitle '1、学院表一览'
listRecords academy; endl
echoTitle '2、学生表一览'
listRecords student; endl
echoTitle '3、成绩表一览'
listRecords subject; endl updateStudentById '' '2132022129,张三,002,dropout'
echoTitle '**学生表一览(更新2132022129后)'
listRecords student; endl topStudent
topStudent 'linux'
topStudent 'math'
} main
Linux笔记 #08# shell编程从零开始到低配学生管理系统的更多相关文章
- linux笔记:shell编程-文本处理命令
cut(字段提取命令,也叫列提取命令): printf(格式化输出命令): awk(awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理): sed(sed是一个很好 ...
- linux笔记:shell编程-正则表达式
正则表达式与通配符(正则表达式匹配字符串,是包含匹配:通配符匹配文件名,是完全匹配.): 基础正则表达式: 正则表达式示例:
- Linux学习笔记(17) Shell编程之基础
1. 正则表达式 (1) 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式:通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find ...
- Linux 与 unix shell编程指南——学习笔记
第一章 文件安全与权限 文件访问方式:读,写,执行. 针对用户:文件属主,同组用户,其它用户. 文件权限位最前面的字符代表文件类型,常用的如 d 目录:l 符号链 ...
- [No000014A]Linux简介与shell编程
Linux 介绍 内核 库: .so 共享对象,windows:dll 动态链接库 应用程序 Linux的基本原则: 1.由目的单一的小程序组成:组合小程序完成复杂任务: 2.一切皆文件: 3.尽量避 ...
- Linux下的Shell编程
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- Linux学习之Shell编程基础
转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来 ...
- linux下的Shell编程(3)shell里的流程控制
if 语句 if 表达式如果条件命令组为真,则执行 then 后的部分.标准形式: if 判断命令,可以有很多个,真假取最后的返回值 then 如果前述为真做什么 [ # 方括号代表可选,别真打进去了 ...
- Linux下的Shell编程(1)最简单的例子
深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一. 从第一行开始 我们可以使用任意一种文字编辑器编写shell脚本,它必须以如下行开始(必须放在文件的第一行): #!/bi ...
随机推荐
- Python 数据结构 链表
什么是时间复杂度 时间频度:一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才知道.但是我们不可能也没有必要对每一个算法都进行上机测试,只需要知道那个算法花费的时间多,那个算法花费得 ...
- [LeetCode] 106. Construct Binary Tree from Postorder and Inorder Traversal_Medium tag: Tree Traversal
Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- 解决使用window.history.back(),返回上一页后,页面不刷新问题
window.onpageshow = function(event) { if (event.persisted) { window.location.reload(); } }
- Please add or free up more resources then turn off safe mode manually.
解决方案:硬盘满了,释放硬盘空间.
- Go cookie
Web状态,对于我们从c/c++转过来的人来说还是很重视的啊 但,如何用好cookie来让我心顺畅,目前还是有点障碍 可能是我没能完全理解cookie 但是,如果由浏览器客户端决定自己绑定那个cook ...
- 从零开始一起学习SLAM | SLAM有什么用?
SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻译为:同时定位与建图.同时定位与地图构建. 「同时定位与地图构建」这几个词,乍一听起来非 ...
- Windows搭建react-native开发环境
一.目标平台 windows+android 1. 必须软件 python2+ nodejs npm 2. 安装react-native命令行 $ npm install -g react-nativ ...
- vue框架(三)_vue引入jquery、bootstrap
一.vue安装jquery 1.按照之前博客的内容,新建一个vue工程. 2.在项目文件夹下,使用命令npm install jquery --save-dev 引入jquery. 3.在build/ ...
- Oracle TNS-01190: The user is not authorized to execute the requested listener command
今天,在玩 lsnrctl命令,是为了了解Oracle的一些配置. 当执行 show inbound_connect_timeout 命令之后,提示了错误信息: TNS-01190: The user ...
- datatable的点击事件
datatable的点击事件 在项目中遇到一个问题,在动态绑定到datatables上的数组,要是用table中的两个某一行中数据作为参数,通过鼠标点击进行获取,查阅官方文档得以解决: //首先定义一 ...