linux第十三周作业 shell脚本应用2

课堂实验--文件操作

  1. 实验任务
  1. 准备工作
    1. 学习Linux shell编程
  1. 实验内容

任务1编写脚本程序,判断两个输入参数的数值关系,并输出结果。

 

If elif else 分支语句进行数值比较:

$1表示传入的第一个参数,$2表示传入的第二个参数,再通过[ 判断条件 ]语句进行数值比较,其中-gt是大于,-lt是小于。

还可用read传入参数。


任务2:编写脚本程序,根据输入参数(数字1-7),输出对应的是周几(Monday、Tuesday...Sunday),(使用case语法实现)。

 

利用了case多分支语句,将输入的参数分为7个模式,判断当输入参数属于其中一个模式时,输出对应的内容。

采用输入参数,用read读入脚本的方式。当输入的数值为5时,输出结果为Friday。

任务3:编写脚本,根据输入数值参数,输出三角形图案,(例参数为5)输出对应输出结果:

*****

****

***

**

*

 

利用两个for循环嵌套结构,其中外部循环条件中的seq 1 $len表示从1开始执行$len次循环;而内部循环条件中的seq $i $len表示从i开始执行$len次循环。故该循环可写成

for (i=1;i<=$len,i++);

do

for (j=i;j<=$len;j++);

do

echo -n “* ”

done

echo

done

当输入参数为5时,其过程为:i表示行号,从i=1第一行开始执行内部循环,此时在内部循环中,将i的值1赋给j,即j从1开始循环到6,每次执行最内部语句echo -n “* “,打印6个星号。接着跳出内部循环到外部循环,i=2时,将2赋给j,即j从2开始一直执行到6,即在第2行打印5个星号,以此类推...

直到最外层循环到6时,打印所有结果。

任务4:编写脚本,实现计算功能函数,根据输入参数完成数值运算。

 

定义函数,内部语句同任务二的方法,用case分支结构构造四种运算模式,最后调用函数。

任务5:编写一个脚本,循环判断,每当有内容输入时,就输出当前系统时间。然后运行此脚本,通过ps命令查看当前脚本的运行信息,并通过kill关闭此脚本进程。

如图,利用while循环,判断条件为是否i≤5,即循环五次,且每次都执行输入变量语句,从而实现每次输入变量都显示系统时间。

 

用ps命令,其中-aux是列出目前所有的正在内存当中的程序。再用grep命令查找指定文件的进程信息。

kill -s 0 pgrep可直接指定要杀死进程的文件名。

3.实验总结

(目的:大家自己做总结,哪怕是很小的错误,以后再遇到类似的问题,能够有处可循)

  1. 知识总结
  1. 条件分支语句
  1. if else或if elif - else fi分支:

 

  1. case语句:

  1. 循环语句结构
  1. for循环:

 

其中,循环条件for i in “seq 1 100” 表示从1到100的循环。

  1. until循环:

  1. while循环:

3、进程概念:

示例:

USER :进程的所属用户,

PID :进程的进程ID号,

%CPU :进程占用的 CPU资源 百分比,

%MEM :进程占用的 物理内存 百分比,

VSZ :进程使用掉的虚拟内存量 (Kbytes) ,

RSS :进程占用的固定的内存量 (Kbytes) ,

TTY :与进程相关联的终端(tty),?代表无关,tty1-tty6是本机上面的登入者程序,pts/0表示为由网络连接进主机的程序。

STAT :进程的状态,具体见2.1列出来的部分 ,

START :进程开始创建的时间 ,

TIME :进程使用的总cpu时间,

COMMAND : 进程对应的实际程序

4、ps命令:

ps命令:

显示进程状态,无选项时显示当前用户在当前终端启动进程。

ps -A //显示所有进程信息

ps -u root //显示指定用户信息

ps -ef //显示所有进程信息,连同命令行

ps -ef | grep ssh //ps与grep常用组合用法,查找特定进程

ps -l //将目前属于用户自己这次登入的PID与相关信息列示出来

ps aux //列出目前所有的正在内存当中的程序

ps -axjf //列出类似程序树的程序显示

  1. 结束进程以及设置优先级:

(2)遇到的问题及解决方法

除了要求完成的任务及思考以外,遇到的问题解决问题的办法等

问题:在任务五中,用ps查找进程信息后,用kill杀死进程无效。

解决:bash命令能够运行 -SIGTERM,而sh命令确无法执行。因为sh无法识别SIGTERM等内置命令或其他特性。所以替换为直接用kill -s 0 ‘pgrep +文件名’来杀死进程。

猜你喜欢

转载自blog.csdn.net/m0_52051577/article/details/121566214