系统编程第三次上机

先把题目和百度到的参考资料粘过来吧orz

弱智答案等ddl过了再粘上来

一是怕错误的答案误导大家,二是怕查重QAQ

实验目的

掌握shell中管道、重定向的用法 学习shell基本语法

进阶内容

注:本部分内容不作为实验必须要求,只是作为对有兴趣深入学习的同学的一些指导。

正则表达式

akw的深入学习http://www.zsythink.net/archives/tag/awk/

sed与grep

实验环境

bash!!!!

实验指导

1. 查看当前shell种类

在shell中输入 echo $shell, 输出应当是bash。

 

如果不是,可以使用which sh ,该命令将显示sh命令的完整路径, 然后将通过创建软链接使得sh指向bash。(强 行复习软链接)

2. 重定向

Linux中默认输入输出分为3类:

标准输入stdin。标准输入文件的编号是0(牢记linux万物皆文件),默认的设备是键盘,命令执行时从键盘读 取数据。

标准输出stdout。标号为1,默认的设备是显示器,命令的输出会被打印到屏幕上。

标准错误stderr。标号为2,默认的设备是显示器,命令执行产生的错误信息会被发送到标准错误文 件。

重定向的意思就是改变这三个文件实际指向,比如我们希望从某个文件中获取输入,那么就需要将标准输入指向这 个文件。 重定向后命令依然从标准输入获得输入,此时标准输入指向这个文件,故命令能够从这个文件获取输 入。

输入重定向:

命令 < 文件名 , 比如 sort < sp.txt , 把sp.txt文件中的内容作为sort的输入。

输出重定向:

命令 > 文件名 , 比如 cat /etc/passswd > ps.log , cat会输出/etc/passwd中内容,但此时并不会输出到屏 幕上,而是输出到ps.log中。

>  会覆盖原文件中内容,  >> 则会将输出追加到原文件末尾。

错误重定向:

命令 2> 文件名 ,比如 gcc -c test.c -o test.out 2 > error.log, 如果gcc编译时出现错误,则会把错误信息输 出到error.log中。

>  会覆盖原文件中内容,  >> 则会将输出追加到原文件末尾。

其他

在重定向错误时使用了错误文件的编号2    其实在输入输出的时候也可以显式写0或1,通常是省略。

&运算符,表示等同于, 2>&1,表示将标准错误从重定向到标准输出指向的文件。如 1>/dev/null ,然 后执行2>&1,此时都指向空设备。

3.  管道

管道作用是将多个命令串连起来,使一个命令的输出作为另一个命令的输入。 命令1 | 命令2 | 命令3 ....| 命令n

ls /etc | grep init 将会输出/etc目录下,文件名包含init的文件/目录。 如果不使用管道,命令就得拆成: ls

/etc > tmp grep init < tmp rm tmp ls /etc | grep init >> testcat test

4. 命令连接符

 

命令的执行是串行的,一条命令结束才能输入下一条命令,我们可以在命令之间加上;分割命令,从而可以一 行输入所有命令。shell会挨个执行。

&&连接符

 

命令1 && 命令2 && 命令3 ,shell在判断出这个表达式的真假后就会停止执行。如果命令1为false,可以判断表达式 一定为假,执行停止。如果为true,那么还需要执行命令2,一直执行到能判断真假为止或者执行完被&&连接的命    令。

 

||连接符

 &&  ,  执行到能判断真假或者所有被连接命令被执行完为止。&&和||的计算方式同c语言中的&&  ||。

4. shell-变量

 

在shell中使用变量无需定义,在使用的时候创建。并且变量不分类型,shell统一认为是字符串,需要的时候 通过一些命令进行转换。

变量赋值 : 变量名= ,等号左右不能够有空格。若字符串中包含空格,则需要用单/双引号括起来。 可以使用readonly将变量改为只读类型。

通过 $ 引用变量值, echo $shell 。 输入变量, read 变量名 

 

引用格式返回值

$var 返回变量值

$var 返回变量值

${#var} 返回变量值的长度

${var:start} 返回从start下标到字符串末尾的子串

${var:start:length} 返回从start下标开始,长度为length的子串

 

实际上还有一些空值判断、字符串替换和正则匹配拆分字符串等,为了精简篇幅,这里不再列举,可自行查阅资料。

 

环境变量

export  变量名  将一个已经存在的本地变量修改为环境变量。 export  变量名=,定义一个环境变量。

 

位置变量

 

在执行shell脚本的时候,可以传入参数,如当前有个脚本叫test, 执行sh test arg1 arg2 arg3 ,那么在test中,$0 代表脚本文件名,$1为第一个参数:arg1,以此类推。   使用shift可以将参数左移,此时$1为arg2,$2为arg3,  $3为   $#为参数数量。

 

特殊参数含义

$# 传递到脚本的参数数量

$? 前一个命令执行情况,0成功,其他值失败

$$ 运行当前脚本的进程id

$! 运行脚本最后一个命令

$* 传递给脚本或者函数的所有参数

 

5. shell-变量运算

let

let 表达式 , 会计算此表达式, 如let i=i+1

(())

((i+=3))

expr

echo `expr 3 + 5` , 这里的引号是反引号,tab上面那个键。

6. shell-if

if 条件

then

....

fi

==============================

if 条件; then #这里有分号,同一行需要分号,可以参考前面命令连接符。或者把then放到下一行

...

else

...

fi 

==============================

if 条件; then...

elif 条件; then...

else...

fi

条件格式为:

1.  一条完整的命令,或者用|| &&等连接的命令。

2. 字符串比较,[逻辑表达式],[ $shell != "bash" ] 。如果后面字符串不含空格,这里可以不加引号,不等号 是!=。

3.   需要注意的是,  []以及其他部分之前需要用空格分离,注意上面的例子,每个部分都用空格分割。

 

4. 数值比较为 [ $a -lg 6 ], -lt为less than, -le为less equal, -eq为equal , -ne为not equal,-ge为greater than, - gt同理。

5. 常用文件测试为: if [ -d arg ] ,如果arg是目录则为真。-f为文件为真,-r可读为真,-w可写,-x可执行等。

 

6. shell-select

交互式命令,用户在预定的选项中选择一个。

select 变量  in 列表

do

...

break done

例子见附件

7. shell-case

类似c中switch

case $var in

'选项1') ... ;;

"选项2") ... ;;

选项3 ) ,,,

esac

 

匹配选项可以用引号,以可以直接列出。然后加上一个   )。

 

7. shell-for

 

for 变量  in 变量列表

do

...

done

 

例子见附件

 

8. shell-while

 

while [表达式] do

...

done

 

例子见附件

 

8. shell-until

 

until [表达式] do

...

done

 

例子见附件

9. shell-函数

 

[function] 函数名 [()]

{

...

[return int]

}

[]中内容可以省略。根据测试只能省略一个。如果不设置返回值,则返回最后指令的执行结果。

 

调用方式为 函数名 参数1 参数2

函数中变量也是全局变量,如果要定义局部变量,则在变量赋值前加上local关键字,如 local a=5。 在函数中,引用参数是通过$1、$2等完成,$0代表函数名。

实验内容

1. 完成一键配置源的脚本,功能有,备份原有源,然后添加163或者清华源等,然后使用yum的update选项更 新。可以在脚本中加入自己常用的软件快捷安装命令,比如vs  code或者chrome的等等。

先进入yum源配置目录
cd /etc/yum.repos.d
备份系统自带的yum源
mv CentOS-Base.repo CentOS-Base.repo.save
下载yum源
163的yum源:
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
(会在/etc/yum.repos.d下生成相应的文件)

更新完yum源后,更新一下,使操作立即生效
yum makecache

用新的yum更新系统(速度快很多)

yum -y update

2.  计算斐波那契数列,第17个值,禁止打表输出。

shell编程建议看《Linux编程基础》

或者博主南柯梦的5篇系列博客:https://www.cnblogs.com/dongying/p/6262935.html

3.  完成一个简单的交互设计,根据用户输入输出对应内容,具体交互内容随意,要求至少用上select,case和read。

同第二题

4. ls -l /boot/grub2 && cat /boot/grub2/grub.cfg | more,解释此条命令含义。

如果自己的虚拟机中没有这两个目录,不要紧。反正是解释又不是要运行23333

&&的使用格式:command1 && command2,command1成功执行后(返回0),继续执行command2

如果command1执行失败(例如不存在这个目录或没有权限,返回非0) ,此时command2不会执行

(其实这个道理很简单2333不是跟c语言一样嘛,唯一的区别是c语言是判断command的true、false,而shell编程是判断是否成功执行)

同理,command1 && command2 && command3.....&& commandn 只要有一个执行失败,后面的命令就不会被执行了

| 是管道,管道前的输出作为管道后的输入,在这里就是前两个命令的输出用more命令输出

5. 在脚本中通过管道+一些命令使得脚本自动提权,而不是输入密码提权,可能用到的命令echo、sudo、su。

用echo输出密码,再通过管道把密码输入,从而实现不必要手动输入密码提权

6. 设计一个函数,输入一个字符串,要求输出字符串第3位~末尾的字串。

 同第二题

转载于:https://www.cnblogs.com/PineZhuo/p/10539272.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态添加模板列及保持页面状态

前台 HTML code <form id"form1"runat"server"><asp:GridView ID"GridView1"runat"server"AutoGenerateColumns"False"><EmptyDataTemplate><asp:Label ID"Label1"runat"server"…

C语言base64编解码

base64码简介 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一&#xff0c;大家可以查看RFC2045&#xff5e;RFC2049&#xff0c;上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如&#xff0c;在Java Persistence系统Hibernate中&#…

学号 20175212 《Java程序设计》第3周学习总结

学号 20175212 《Java程序设计》第3周学习总结 教材学习内容总结 一、 Java——面向对象语言 核心内容为对象&#xff0c;一切围绕着对象。以下为三个重要性质&#xff1a; 封装性&#xff1a;将数据和对数据的操作封装在一起。继承&#xff1a;子类可以继承父系的属性和行为。…

简析EDMX文件的构成 - CSDL、SSDL、MSL

To be done…转载于:https://www.cnblogs.com/5kuai/archive/2010/01/24/1655141.html

Cocos2d开发1:Xcode与TexturePacker的集成

2019独角兽企业重金招聘Python工程师标准>>> 一、导读 这是一篇关于xcode与TexturePacker集成的文章&#xff0c;主要说明cocos2d-iphone/cocos2d-x游戏开发时如何进行图片资源的自动化管理。在进行游戏开发时&#xff0c;我们为了提升性能及减少游戏安装包的大小&…

Boost智能指针——boost::scoped_ptr(使用及原理分析)

简介 boost::scoped_ptr是一个比较简单的智能指针&#xff0c;它能保证在离开作用域之后它所管理对象能被自动释放。下面这个例子将介绍它的使用&#xff1a; 1 #include <iostream>2 #include <boost/scoped_ptr.hpp>3 4 using namespace std;5 6 class Book7 {8 …

文件辅助类封装

using System;using System.Collections.Generic;using System.IO;using System.Text; namespace Manjinba.Communication.Common.Utils{ /// <summary> /// 文件辅助类 /// </summary> public class FileHelper { #region 检测指定目录是否存在 /// <summary&…

你知道吗…我不知道…你知道吗

很多你自以为知道却不知道的东西&#xff0c;你知道吗…我不知道…你知道吗…… 1.拉斯维加斯的赌场都没有钟。 2.麦当劳40%的利润来自Happy Meals的销售。 3.1996版的韦伯斯特词典有315处拼写错误。 4.每天平均有12个新生儿被交给错误的父母。 5.巧克力对于狗来说是致命的&…

c# 读取记事本txt文档到DataTable中

有时候我们仅仅需要用到简单的几个数据,没有必要在数据库中建立单独的表去存储这些数据然后去连接数据库等等。 例如&#xff1a;我们的程序中只需要给几个人定时发送邮件&#xff0c;而这几个人的邮件地址则可以放到txt文档中,然后读取出来即可。 从txt读取出来的数据&#xf…

通读教材第二问

我在教材第14章看到这样一段话&#xff1a;在专业时间模型中&#xff0c;一个Scrum团队负责开发项目的Product Backlog&#xff0c;同时还负责专门的时间来处理现有产品或者服务出现的问题。 请问&#xff1a;在团队项目开发中&#xff0c;专业时间模型是什么&#xff1f; 在查…

智能指针对比

智能指针对比&#xff1a; (1)、boost::shared_ptr<T> -- 基于引用计数器refcount(原子的) <1>、构造函数中refcount1&#xff0c;析构函数中refcount-1&#xff0c;当refcount的值减到为0时&#xff0c;该对象就会被销毁。 <2>、解决循环引用的问题&#x…

魔兽争霸3地图(WarIII Maps):梦若流星

魔兽争霸3地图&#xff08;WarIII Maps&#xff09;&#xff1a;梦若流星梦若流星游戏类型&#xff1a;RPG通关时间&#xff1a;30分钟流星蝴蝶剑后传&#xff0c;即使孟星魂想独善其身&#xff0c;也未必就能如愿………………为了更好的体验游戏&#xff0c;请在在“选项—声音…

Sql Server 关于整表插入另一个表部分列的语法以及select 语句直接插入临时表的语法 (转帖)...

语法是这样的 :1、说明&#xff1a;复制表(只复制结构,源表名&#xff1a;a 新表名&#xff1a;b) (Access可用) 法一&#xff1a;select * into b from a where 1 <>1 法二&#xff1a;select top 0 * into b from a 2、说明&#xff1a;拷贝表(拷贝数据,源表名&#xf…

在.Net中,如何创建一个后台执行的进程?

在.Net中&#xff0c;创建一个进程十分容易。但是如果你想创建一个没有窗口的后台进程&#xff0c;你需要对ProcessStartInfo进行一些特殊的设置&#xff1a; var process new Process() { StartInfo new ProcessStartInfo("executable file name", "argument…

WorldWind Java 版学习:1、启动过程

一、JOGL使用介绍 使用 JOGL&#xff0c;需要构造GLCapabilities、GLCanvas 和 GLEventListener 的对象&#xff0c;其中 GLCapabilities 对象用于构造 GLCanvas 对象&#xff0c;将 GLCanvas 添加到相应的 Container 中用于窗口显示&#xff0c;实现 GLEventListener 中的init…

Redis pub/sub机制在实际运用场景的理解(转载)

Redis 的pub/sub机制与23种设计模式中的观察者设计模式极为类似。但Redis对于这个机制的实现更为轻便和简结&#xff0c;没有观察者模式的那么复杂的逻辑考虑而仅仅需要通过两个Redis客户端配置channel即可实现&#xff0c;因此它也仅仅做了消息的"发布"和"订阅…

第三周学习进度总结

本周学习进度&#xff1a; 第三周3月11日至3月17日每天平均写代码时间30分钟代码量630行左右所发博客数6篇本周学到的知识点对HTMLcss的常用知识点有了大概的了解&#xff0c;对java的文件操作更加熟练了下周的计划熟练掌握本周学到的知识点&#xff0c;简单了解安卓手机端开发…

flash特效原理:图片滑动放大效果(2)

flash特效原理&#xff1a;图片滑动放大效果(1) http://blog.csdn.net/hero82748274/archive/2009/10/22/4715312.aspx 最近看了一些关于动态注册点更加的办法&#xff0c;顺手牵羊把他下载了&#xff0c;感觉挺好用。再把一个倒影类给下载了&#xff0c;结合上次一个做法&…

Windows Phone 7实现图片数据绑定

Windows Phone 7实现图片数据绑定 首先我们使用ListBox来显示多张图片&#xff0c;然后在建立一个单独的页面来显示单独的一张图片。 1.我们建立一个Picture.xaml的页面&#xff0c;并使用ListBox控件来显示多张图片的信息。&#xff0c;示例代码如下&#xff1a; <Grid x:N…

类前置声明的使用

今天在写代码时&#xff0c;遇到了是否需要加头文件的问题&#xff0c;看到这个博客之后收益匪浅&#xff0c;因此转载该篇文章。 转载&#xff1a;https://www.jianshu.com/p/9768175387b6 首先我们看这样一个示例程序: 以上代码中,类CY中有个CX类型的数据成员,我们需要在CY…