bash脚本之for循环和while循环及包管理

一.概述

上一章剩余内容

压缩工具 cpio

复制从或到文件

cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件。

cpio[选项] > 文件名或者设备名

cpio[选项] < 文件名或者设备名

选项

-o 将文件拷贝打包成文件或者将文件输出到设备上

-i解包,将打包文件解压或将设备上的备份还原到系统

-t 预览,查看文件内容或者输出到设备上的文件内容

-v 显示打包过程中的文件名称。

-d 解包生成目录,在cpio还原时,自动的建立目录

-c 一种较新的存储方式

二.shell 脚本编程

循环执行

将某代码段重复运行多次

重复运行多少次:

循环次数事先已知

循环次数事先未知

有进入条件和退出条件

for, while, until  

for 

while 当…

until 直到…

for循环

for 变量名in 列表;do

循环体

done

执行机制:

依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束

列表生成方式:

(1) 直接给出列表

(2) 整数列表:

(a) {start..end}

(b) $(seq[start [step]] end)

(3) 返回列表的命令

$(COMMAND)

(4) 使用glob,如:*.sh

(5) 变量引用;

$@, $*

until循环

until CONDITION; do

循环体

done

进入条件:CONDITION 为false

退出条件:CONDITION 为true

循环控制语句continue

用于循环体中

continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层

while CONDTIITON1; do

CMD1

if CONDITION2; then

continue

fi

CMDn

done

循环控制语句break

用于循环体中

break [N]:提前结束第N层循环,最内层为第1层

while CONDTIITON1; do

CMD1

if CONDITION2; then

break

fi

CMDn

done

三.软件包管理

1)概述

软件运行环境

软件包基础

Rpm包管理

yum管理

定制yum仓库

编译安装

软件运行的环境

API:Application Programming Interface(应用程序开发接口)

POSIX:Portable OS  (国际标准)

程序源代码–> 预处理–> 编译–> 汇编–> 链接

静态编译:

共享编译:.so

ABI:Application Binary Interface (应用程序的二进制接口)

Windows与Linux不兼容

ELF(Executable and Linkable Format)

PE(Portable Executable)

库级别的虚拟化:

Linux: WINE

Windows: Cywin

开发语言

系统级开发

C

C++

应用级开发

java

delphi

Python

go

php

perl

ruby

包管理器

二进制应用程序的组成部分:

二进制文件、库文件、配置文件、帮助文件

查询关联的库文件

例: ldd /bin/ls

程序包管理器:

debian:deb文件, dpkg包管理器

redhat: rpm文件, rpm包管理器

rpm: RedhatPackage Manager

RPM Package Manager

包的命名方式

源代码:name-VERSION.tar.gz|bz2|xz

VERSION: major.minor.release

rpm包命名方式:

name-VERSION-release.arch.rpm

例:bash-4.2.46-19.el7.x86_64.rpm

VERSION: major.minor.release

release:release.OS

常见的arch:

x86: i386, i486, i586, i686

x86_64: x64, x86_64, amd64powerpc: ppc

跟平台无关:noarch

包命名和工具

包:分类和拆包

Application-VERSION-ARCH.rpm: 主包

Application-devel-VERSION-ARCH.rpm开发子包

Application-utils-VERSION-ARHC.rpm其它子包

Application-libs-VERSION-ARHC.rpm其它子包

包之间:可能存在依赖关系,甚至循环依赖

解决依赖包管理工具:

yum:rpm包管理器的前端工具(经常使用)

apt-get:deb包管理器前端工具

zypper: suse上的rpm前端管理工具

dnf: Fedora 18+ rpm包管理器前端管理工具

库文件

查看二进制程序所依赖的库文件:

ldd/PATH/TO/BINARY_FILE

管理及查看本机装载的库文件:

ldconfig

/sbin/ldconfig-p: 显示本机已经缓存的所有可用库文件

名及文件路径映射关系

配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

缓存文件:/etc/ld.so.cache

包管理器

功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作

1、包文件组成(每个包独有)

RPM包内的文件

RPM的元数据,如名称,版本,依赖性,描述等

安装或卸载时运行的脚本

2、数据库(公共)

程序包名称及版本

依赖关系

功能说明

包安装后生成的各文件路径及校验码信息

程序包的来源

管理程序包的方式:

使用包管理器:rpm

使用前端工具:yum, dnf

获取程序包的途径:

(1) 系统发版的光盘或官方的服务器;

CentOS镜像:

https://www.centos.org/download/

http://mirrors.aliyun.com

http://mirrors.sohu.com

http://mirrors.163.com

(2) 项目官方站点

(3) 第三方组织:

Fedora-EPEL:

Extra Packages for Enterprise Linux

Rpmforge:RHEL推荐,包很全

搜索引擎:

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

https://sourceforge.net/

(4) 自己制作

注意:检查其合法性:来源合法性,程序包的完整性

rpm包管理 (重点~!!!)

CentOS系统上使用rpm命令管理程序包:

安装、卸载、升级、查询、校验、数据库维护

安装:

rpm {-i|–install} [install-options] PACKAGE_FILE…

-v: verbose

-vv:

-h: 以#显示程序包管理执行进度

rpm -ivhPACKAGE_FILE …

rpm包安装

[install-options]

–test: 测试安装,但不真正执行安装;dry run模式

–nodeps:忽略依赖关系

–replacepkgs(如果丢失中的一个,可以使用这个命令进行覆盖安装)| replacefiles (覆盖重复的)

–nosignature: 不检查来源合法性(本身系统不具备检查系统的合法性.使用这个可以忽略)

–nodigest:不检查包完整性

–noscipts:不执行程序包脚本片断

%pre: 安装前脚本;–nopre

%post: 安装后脚本;–nopost

%preun: 卸载前脚本;–nopreun

%postun: 卸载后脚本;–nopostun

rpm包升级

升级:

rpm {-U|–upgrade} [install-options] PACKAGE_FILE…

rpm {-F|–freshen} [install-options] PACKAGE_FILE…

upgrade:安装有旧版程序包,则“升级”

如果不存在旧版程序包,则“安装”

freshen:安装有旧版程序包,则“升级”

如果不存在旧版程序包,则不执行升级操作

rpm -UvhPACKAGE_FILE …

rpm -FvhPACKAGE_FILE …

–oldpackage:降级

–force: 强行升级

升级注意项

注意:

(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核

(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

1、判断/var/目录下所有文件的类型

blob.png

2、添加10个用户user1-user10,密码同用户名

blob.png

3、/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的文件输出为文件加stop,以S开头的文件输出为文件名加start;

“K34filename stop”

“S66filename start”

blob.png

4、编写脚本,提示输入正整数n的值,计算1+2+3+…n的总和

blob.png

5、编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态    

blob.png

6、打印九九乘法表

blob.png

7.编写脚本,删除gid大于1000的组

blob.png

8.编写脚本,求100以内所有正整数之和

blob.png

9.编写脚本,通过ping命令探测172.16.250.1-254范围内的所有主机的在线状态,统计在线主机和离线主机各多少。

blob.png

10.编写脚本,打印九九乘法表

blob.png

11.编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者

blob.png

12.编写脚本,实现打印国际象棋棋盘

blob.png

13.每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并提示该用户退出系统。

blob.png

14.随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出。

blob.png

原创文章,作者:Kartik,如若转载,请注明出处:http://www.178linux.com/38774

(0)
KartikKartik
上一篇 2016-08-24
下一篇 2016-08-24

相关推荐

  • 马哥教育网络班21期+第5周作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行(以/boot/grub2/grub.cfg代替); [root@localhost ~]# grep '^[[:space:]]\+' /boot/grub2/grub.cfg    load_e…

    Linux干货 2016-08-08
  • 第一周作业

    1、描述计算机的组成及其功能。 计算机的基本功能:数据处理、数据存储、数据传输、控制; 计算机中的数据:包含计算机所能处理的给中对象,如数值、字符、图形、图像、声音、视频等。 计算机的所有功能都是通过指令实现的。 指令:是计算机硬件能直接识别并执行的命令,不同种类的计算机通常有着不同的指令编码,一台计算机的所有指令集合称之为指令系统。若干条指令组成的一个指令…

    Linux干货 2016-12-12
  • 马哥教育网络班22期+第三周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。  ~]# who |sort -nu root     pts/0        2016-08-…

    Linux干货 2016-08-29
  • vim编辑器

    vim编辑器: 文本编辑器:文本,纯文本,ASCII text;Unicode; 文本编辑种类:                 行编辑器:sed                全屏编辑器:…

    2017-04-17
  • 编程命名中的7+1个提示

    前几天Neo写过《编程中的命名设计那点事》,这里也有另外一篇和程序命名的文章,可以从另一个角度看看。 1.- 变量应该是尽可能的望文知意。千万不要使用教材中的命名方式。 好的变量: daysDateRange, flightNumber, carColor. 坏的变量: days, dRange, temp, data, aux… 在我们…

    Linux干货 2015-04-03
  • 设计模式 ( 二十 ) 访问者模式Visitor(对象行为型)

    特此说明:对访问者模式理解不是特别透彻,若有误,请指正,谢谢! 1.概述 在软件开发过程中,对于系统中的某些对象,它们存储在同一个集合collection中,且具有不同的类型,而且对于该集合中的对象,可以接受一类称为访问者的对象来访问,而且不同的访问者其访问方式有所不同。 例子1:顾客在超市中将选择的商品,如苹果、图书等放在购物车中,然后到收银员处付款。在购…

    Linux干货 2015-04-07