写在开头开头

    近日新型冠状肺炎很严重,学校也开不了学了,在MOOC上学习操作系统原理时
    看到MOOC上推荐完成的实验题,在这里记录一下。 
    本篇给出 1,2两题的解析,3,4在下一篇中分享

3.1 (实验目的:熟悉Windows批处理编程)在Windows环境下,编写一个批处理程序(算命大师.bat),程序运行后,输入:出生年月日(例如20000731)。系统输出你的属相和星座,例如:你属兔,狮子座。

3.2 (实验目的:熟悉Linux脚本编程)在Linux环境下,编写一个Shell脚本理程序,能统计给定文本文件的单词数,行数。

3.3 (实验目的:了解操作系统生成的概念,熟悉Linux内核编译和裁剪)在Ubuntu或Fedora环境下裁剪和编译Linux内核,并启用新的内核。源代码下载网址:www.kernel.org.
-------3.3的戳这里:操作系统原理实验一(二)
3.4 (实验目的:熟悉Linux系统调用原理)在Ubuntu或Fedora环境下为Linux内核增加1-3个新的系统调用,并启用新的内核,编写一个应用程序测试新增加的系统调用是否能正确工作。源代码下载网址:www.kernel.org.
-------3.4的戳这里:操作系统原理实验一(三
----------------------------------------------------------------------------------------------------

3.1Windows批处理编程

运行效果

在这里插入图片描述

代码展示

@echo off
REM 声明采用UTF-8编码
@chcp 65001

:while

set /p birthday=请输入出生年月日(格式如20000412):
set year=%birthday:~0,4%
set month=%birthday:~4,2%
set day=%birthday:~6,2%


set /a yy=%year%%%12
if %yy%==0 ( set bb=你属猴,
	) else if %yy%==1 ( set bb=你属鸡,
	) else if %yy%==2 ( set bb=你属狗,
	) else if %yy%==3 ( set bb=你属猪,
	) else if %yy%==4 ( set bb=你属鼠,
	) else if %yy%==5 ( set bb=你属牛,
	) else if %yy%==6 ( set bb=你属虎,
	) else if %yy%==7 ( set bb=你属兔,
	) else if %yy%==8 ( set bb=你属龙,
	) else if %yy%==9 ( set bb=你属蛇,
	) else if %yy%==10 ( set bb=你属马,
	) else if %yy%==11 set bb=你属羊,

if %month%==04 (
	if %day% leq 19 ( echo %bb%白羊座 )else  echo %bb%金牛座
) else if %month%==05 (
	if %day% leq 20 ( echo %bb%金牛座 )else  echo %bb%双子座
) else if %month%==06 (
	if %day% leq 21 ( echo %bb%双子座 )else  echo %bb%巨蟹座
) else if %month%==07 (
	if %day% leq 22 ( echo %bb%巨蟹座 )else  echo %bb%狮子座
) else if %month%==08 (
	if %day% leq 22 ( echo %bb%狮子座 )else  echo %bb%处女座
) else if %month%==09 (
	if %day% leq 22 ( echo %bb%处女座 )else  echo %bb%金牛座
) else if %month%==10 (
	if %day% leq 23 ( echo %bb%天秤座 )else  echo %bb%天蝎座
) else if %month%==11 (
	if %day% leq 22 ( echo %bb%天蝎座 )else  echo %bb%射手座
) else if %month%==12 (
	if %day% leq 21 ( echo %bb%射手座 )else  echo %bb%摩羯座
) else if %month%==01 (
	if %day% leq 19 ( echo %bb%摩羯座 )else  echo %bb%水瓶座
) else if %month%==02 (
	if %day% leq 18 ( echo %bb%水瓶座 )else  echo %bb%双鱼座
) else if %month%==03 (
	if %day% leq 20 ( echo %bb%双鱼座 )else  echo %bb%白羊座
)

echo.
ping -n 2 127.0.0.1 >nul
goto while
pause

简单解释一下

  1. @echo off 是为了 此语句以下的命令语句不会在输出屏显示

  2. chcp 65001 是声明采用UTF-8编码 (因为我在notepad++编辑这个程序时使用的是UTF-8编码,而控制台默认是使用GBK,所以如果没有这句的话,中文输出可能会有问题)

  3. set /p birthday= -->进行读入赋值时 要加/p 会将输入的字符串赋值给birthday

  4. set year=%birthday:~0,4% -->时从 birthday的第0位开始向后截取4个字符, 并赋给year

  5. set /a yy=%year%%%12
    进行运算赋值时 要加/a %year% 代表year指代的值 %% 表示取余运算

  6. %day% leq 19 leq是小于等于的意思 另外:EQU - 等于 NEQ - 不等于 LSS - 小于 GTR - 大于 GEQ - 大于或等于

  7. ping -n 2 127.0.0.1 >nul是造成一个1秒的sleep()

  8. :whilego while 就是让程序循环运行

3.2Linux脚本编程

运行效果

在这里插入图片描述

代码展示

#!/bin/sh

echo 请输入要查询的文档名称
read filename

echo $filename所含单词数为
cat $filename | wc -w
echo $filename所含行数为
cat $filename | wc -l

简单解释一下

  1. read filename 读入输入的字符串并赋值给filename
  1. cat $filename | wc -w
    cat 读取打开filename指代的文件并通过“|”通道传给后面
    wc -w 是查取 变量filename 所指代的文件的单词数
  1. cat $filename | wc -l
    wc -l 是查取 变量filename 所指代的文件的行数

写在结尾

希望以上可以帮到你!
如有错误,或不同想法,欢迎指出,互相学习共同进步!

Logo

更多推荐