南京信息工程大学实验报告

 

实验名称

 

shell 编程(2)  实验日期

2018-5-30

 

得分

 

指导教师

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

计软院

 

专业

软嵌   年级

2015 级

班次  (1)

姓名 王江远

学号

20151398006

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

一、实验目的

 

  1. 掌握 shell 程序编写和执行方法

 

  1. 掌握 shell 特殊字符的用法

 

  1. 掌握 shell 字符串的处理

 

  1. 掌握 shell 变量、数组、环境变量、位置变量的基本用法

 

  1. 熟练掌握 shell 中条件测试和关键字 if, case, while, for, until 的用法

 

  1. 理解和掌握 shell 函数的使用方法

 

  1. 掌握 shell 脚本的调试方法

 

  1. 综合应用 shell 命令编程解决实际问题

 

二、实验准备

 

结合第 4 章教材和课件,复习并梳理以下知识点:

 

  1. shell 程序建立和执行的方法

 

  1. shell 特殊符号的含义和用法(单引号、双引号、倒引号、重定向符号、管道线等)

 

  1. shell 中普通变量、位置变量、环境变量的用法(4.6 节)

 

  1. 算术运算

 

  1. shell 中字符串的处理

 

  1. shell 中条件测试表达式的用法;用于文件、字符串、数值测试的运算符用法

 

  1. shell 关键字 if, case, while, for, until; shell 函数的编写和使用

 

  1. shell 脚本的调试(4.13 节)

 

三、实验内容

 

  1. shell 变量基本用法及常用符号使用(必做)

 

  1. shell 脚本分析 (必做)

 

  1. shell 脚本编写(必做)

 

  1. 修改配置文件定制个性化操作系统环境或编写 shell 脚本实现任务的自动化处理(选做)

 

四、实验步骤

 

  1. 1.  shell 变量基本用法及常用符号使用

 

此部分要求写出实现相应要求的 shell 命令,截图显示

 

(1)将主提示符改为用户的主目录名

 

(提示:参考教材 4.6.8 节环境变量 PS1 和 HOME 的用法)

 

(2)将字符串 DOS       file       c:>\$student\*赋值给变量 x,并显示出来

 

(提示:注意引号的选择,同时确保字符串中多个空格、$、*等完全原样显示)

 

(3)在 shell 命令终端输入 likes=(cosmos galaxy moon); likes[6]=mars,然后使用 echo 分别显示以下表达式的值,并结合结果,写出表达式的作用。

 

①   ${likes[*]}

 

 

  

②   ${likes[@]}

 

③ ${#likes[*]}

 

④ ${#likes[@]}

 

⑤ ${#likes}

 

⑥ ${#likes[0]}

 

(提示:参考教材 4.6.2 节和 4.6.3 节)

 

(4)在 shell 命令终端输入 name=Phoenix,然后使用 echo 显示表达式①,观察结果;然后输入命令 unset name,再输入表达式①观察结果。结合两次结果,写出表达式的作用。

 

①   ${name:-hello}

 

(提示:参考教材 4.7 节)

 

(5)在 shell 命令终端输入 name=\’/usr/share/doc/apg/php.tar.gz\’,然后使用 echo 分别显示表达式①和②的值,观察结果。

 

修改 name 的值,让 name=\’/etc/apt/sources.list.d\’,再次使用 echo 分别显示表达式①和②的值,观察结果。

 

结合结果,写出表达式的作用。

 

① ${name%%.*}            ② ${name%.*}

 

(提示:参考教材 4.6.3 节)

 

(6)在 shell 命令终端输入 name=/usr/bin/X11,然后使用 echo 分别显示表达式①和②的值,观察结果。

 

修改 name 的值,让 name=\’/etc/apt/sources.list.d\’,再次使用 echo 分别显示表达式①和②的值,观察结果。

 

结合结果,写出表达式的作用。

 

① ${name#*/}                 ② ${name##*/}

 

(提示:参考教材 4.6.3 节)

 

(7)已知某同学提交的博客文章页面地址 address 如下:

 

address=\’http://www.cnblogs.com/xyz/p/8569001.html\’

 

通过字符串匹配,如何得到其博客主页地址:

 

homepage=\’http://www.cnblogs.com/xyz\’

 

写出由变量 address 得到变量 homepage 的 shell 命令实现。

 

(提示:参考前序练习(5))

 

2. shell 脚本分析

 

(1)使用 vim/gedit 编写 shell 脚本文件 ex1.sh,其内容如下:(教材 P145 思考题 4.8)

 

 

 

在 shell 命令终端分 3 次运行该脚本,观察其运行结果。

 

① 第 1 次运行:.   ex1.sh

 

② 第 2 次运行:.   ex1.sh   best   wishes

 

③ 第 3 次运行:.   ex1.sh   god    bless    u

 

结合 3 次运行结果,分析脚本代码,在实验报告中总结以下内容:

 

① 整个 shell 脚本的功能是什么?

 将句子倒叙输出

② 第 8 行、第 9 行、第 11 行的功能是什么?

第8行:将cmd通过循环变为“echo + 输入句子的倒叙”

第9行:指每循环一次,$count数减少1

第11行:指运行cmd命令

③ 每次运行时,脚本中的 while 循环分别执行几次?

 分别运行0,2,3次

④运行.    ex1.sh   god    bless     u 时,while循环体第1次被执行时,第8行执行后变量cmd的值为?

 cmd $3

(2)使用 vim/gedit 编写 shell 脚本文件 ex2.sh,其内容如下:(教材 P145 4.10)

 

在命令终端输入. ex2.sh jsj,(实际执行时,请将jsj替换为您电脑中的登录用户名)结合结果及帮助信息,回答下列问题。

 

①   line6 中,who | grep “^$1”的功能?

判断用户是否存在

② line8~10 功能?

将第一个参数重定向到LimitString中,向其发送Hello hadoop

 

(我ex2和ex3弄饭了)

(3)使用 vim/gedit 编写 shell 脚本文件 ex3.sh,其内容如下:

在命令终端输入.   ex3.sh,结合结果及帮助信息,回答下列问题。

① 截图显示运行结果。

② 该脚本的功能是?

该脚本功能是将当前文件夹下的所有.sh格式的文件复制,新文件名为为原文件名加上后缀”.BACKUP–日期–时间”

(4)使用 vim/gedit 编写 shell 脚本文件 ex4.sh,其内容如下:

在 shell 命令终端分 3 次运行该脚本,观察其运行结果。

 

① 第 1 次运行:.   ex4.sh

 

② 第 2 次运行:

.

ex4.sh

/etc/apt/sources.list

 

 

 

 

 

 

③ 第 3 次运行:

.

ex4.sh

/etc/apt/sources.list

ex4.sh

 

结合运行结果,分析 shell 脚本功能。回答:

 

①   line4-10 中函数 NL 的功能?

 

②   line14 中,条件测试满足时,脚本执行的功能是?

 

③ line17-line21,这部分脚本的功能是?

 

3. shell 脚本编写

 

此部分要求贴出实现相应要求的 shell 脚本程序,并截图显示脚本执行及结果

 

(1)第 4 章 思考题 4.9

 

(2)第 4 章 思考题 4.11

 

(3)第 4 章 思考题 4.12

 

(4)第 4 章 思考题 4.18

 

(提示:利用 cut 命令及相应选项,考虑位置参数使用)

 

(5)猜数字游戏

 

具体要求如下:

 

① 写一个函数 random0_100 生成 0~100 之间的随机数

 

② 用户从键盘输入竞猜数字,如果猜错了,提示用户所猜数字偏大或偏小,用户继续猜,直至猜对为止。

 

(提示:shell 内部系统变量 RANDOM 生成 0~32767 之间的整数随机数)

 

  1. 4.    修改配置文件定制个性化操作系统环境或编写 shell 脚本实现任务的自动化处理(选做)

 

shell 脚本最大的用途之一就是用于编写一些小型脚本程序以实现任务处理的自动化。或,通过查阅资料,尝试修改配置文件,实现个性化的操作系统环境配置。

 

如果尝试的是编写 shell 脚本实现任务的自动化处理,请在报告中描述其应用场景、功能,并附上 shell 脚

 

 

第 4 页/共 5 页

 

 

本。

 

如果尝试的是修改配置文件定制个性化操作系统,请在报告中截图显示具体实现的定制效果,及为了实现其而对配置文件做的具体修改;

 

五、总结与体会

 

 

(此部分要求书写内容:可以是基于本次实验对相关内容的归类总结;或,在本次实验中你的收获、发现、体会、尚存的问题等)

 

 

六、实验提交及评阅要求

 

  1. 提交形式:

 

以技术博客文档形式在线提交

 

  1. 文档内容

 

撰写「四、实验结论」和「五、总结与体会」即可。

 

  1. 提交截止时间

 

2018 年 6 月 6 日晚 24:00 前(以博客园文章页面显示的提交日期界定)

 

  1. 文档评阅规则

 

采用 5+X 互阅互评方式

 

每个人至少浏览评阅 5 篇,X 任意。以「(自己学号尾数 3 位+30)%48」得到的数字作为自己要评阅的

 

同学学号,由此开始,连续评阅 5 篇。X 任选。

 

以学号 001 为例,指定评阅的 5 篇为学号尾数为 031~035 的五位同学(「(001+30)%48=31」)

 

如浏览评阅过程中,发现错误之处,请在评论处指出。

 

  1. 互评入口说明

 

互评浏览时,请进第一次实验收集汇总的博客地址页面,按序号快速进入其它同学博客页面。第一次作业汇总的博客站点页面:

 

https://edu.cnblogs.com/campus/njxxgc/linuxprogramming/homework/1697

 

 

 

七、附

 

实验内容「2. shell 脚本分析」中脚本 ex1.sh~ex4.sh 也随本文档打包。

 

(1)鉴于大家对 shell 脚本语法的熟练度不够,虽然打包附上,建议仍先自行手动输入。踩踩空格、

 

变量访问、条件测试、循环等用法的各种坑。遇到错误时,尝试使用 set   -x 和 set +x 调试。

 

(2)如果直接使用时遇到所有者权限等问题(因为,目前的所有者都是 jsj),请应用所学和文件权限

 

有关的命令 chmod, chown 尝试解决。

 

 

 

 

 

 

 

第 5 页/共 5 页

版权声明:本文为wangjiangyuan96原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wangjiangyuan96/p/9142605.html