持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情
大连海事大学Linux实验三:shell编程的一些小实验。这里shell有很多小细节的语法,一定要注意。这里只是几个简单的案例和思路,仅作参考。
一、实验题目
- 目录/home/buyhorse1/records/linux2021Fall,保存了实验课出勤的记录,每次上课进行两次点名,每天的两次点名只要出现1次就认定本次上 课出勤。
(1)请统计每名学生出勤的次数,并按账号顺序排序。输出格式为:学 生账号:次数。
(2)自己的出勤统计要求在最后一行输出。
-
回文数是指其各位数字左右对称的整数,例如121,1001,92329等。编 写一个程序,输入一个正整数n,打印从1-n之间的回文数,并统计个数。
-
输入一正整数n,打印1-n之间的整数,要求去掉包含7的数字和7的整数 倍的数字。
-
编程实现创建成绩单文件score.txt。要求:成绩单至少包括学号、姓名及 其成绩3项内容,至少能够从键盘添加、删除和查询。
二、代码实现及解读。
1.出勤统计:
#!/bin/bash
awk '{print($1)}' /home/buyhorse1/records/linux2021Fall/202110150839 > 1.txt&&
awk '{print($1)}' /home/buyhorse1/records/linux2021Fall/202110150918 > 2.txt&&
cat 1.txt 2.txt | sort | uniq > result1.txt&&
通过awk筛选出同一日期的两个记录的第一列取其交集放入reslut1.txt,同理生成六个result.txt文件意为只要有一次存在即可算做这一天签到成功这里的日期一定要注意,改成属于你们那一段的。
awk '{print($1)}' /home/buyhorse1/records/linux2021Fall/202110220825 > 1.txt&&
awk '{print($1)}' /home/buyhorse1/records/linux2021Fall/202110220906 > 2.txt&
&cat 1.txt 2.txt | sort | uniq > result2.txt&&
awk '{print($1)}' /home/buyhorse1/records/linux2021Fall/202110290832 > 1.txt&&
awk '{print($1)}' /home/buyhorse1/records/linux2021Fall/202110290910 > 2.txt&&
cat 1.txt 2.txt | sort | uniq > result3.txt&&
awk '{print($1)}' /home/buyhorse1/records/linux2021Fall/202111050817 > 1.txt&&
awk '{print($1)}' /home/buyhorse1/records/linux2021Fall/202111050913 > 2.txt&&
cat 1.txt 2.txt | sort | uniq > result4.txt&&
awk '{print($1)}' /home/buyhorse1/records/linux2021Fall/202111120829 > 1.txt&&
awk '{print($1)}' /home/buyhorse1/records/linux2021Fall/202111120910 > 2.txt&&
cat 1.txt 2.txt | sort | uniq > result5.txt&&
awk '{print($1)}' /home/buyhorse1/records/linux2021Fall/202111190826 > 1.txt&&
awk '{print($1)}' /home/buyhorse1/records/linux2021Fall/202111190910 > 2.txt&&
cat 1.txt 2.txt | sort | uniq > result6.txt&&
cat result1.txt result2.txt result3.txt result4.txt result5.txt result6.txt | sort | uniq -c | sort -r > result.txt&&
将六天的文件合并成一个文件,并通过排序,去重并记录其重复次数。意为统计出勤次数。
awk '$2 ~ /stu/ &&length($2)>3 {print($2" "$1)}' result.txt | sort >records.txt&&awk '$1 !~ /stu2625/ {print($1" "$2)}' records.txt > count.txt&&
首先筛选出不是本人学号(stu2625,改成自己的饭)的记录将其重定向输出到count.txt文件,然后筛选出本人学号的记录将其重定向追加输出到count.txt文件
awk '$1 ~ /stu2625/ {print($1" "$2)}' records.txt >> count.txt&&
rm 1.txt 2.txt result.txt result1.txt result2.txt result3.txt result4.txt result5.txt result6.txt records.tx
除结果文件,其余全部删除,本人轻微强迫症,见谅。
2. 回文数输出:
echo -n "请输入一个数(输出1-n范围内的回文数):"
read in #从键盘读入一个数
let in=$((in));
for ((var=1; var<=$in; var++))
do
res=`echo $var|rev` #反转结果
var1="$var"
if [ $res -eq $var1 ];then #如果反转结果和输入结果相等,即为回文数输出
echo $var1
fi
done
3. 输出与7无关的数字:
echo -n "请输入一个数(输出与7无关的数):"
read in #从键盘读入一个数
let in=$(($in));
for ((var=1; var<=$in; var++))
do
res=`expr $var % 7`
if [ $res = 0 ];then
echo " "
elif [[ "$(echo "$var" | grep "7")" != "" ]];then
echo " "
else
echo $var
fi
done
4. 编程实现创建成绩单文件,支持增删改查
之前觉得很难,但是现在感觉就是创建个文件,然后写四个shell脚本,通过shell脚本对文件进行操作。
思路给了,就不写了。挺麻烦的。
三、实验结果
1.conunt.txt
2. 回文数:
3.与7无关的数
四、实验分析
本次实验我们通过shell编程实现了前三个问题。通过解决这三个问题了解并熟悉了shell编程,并通过具体情境的命题深入理解了shell编程能够处理什么样的问题,以及善于处理什么样的问题。
源码地址:
linux 实验/lab3 lab3 shell编程实践 · 华灯初上/海大学长的遗泽 - 码云 - 开源中国 (gitee.com)