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)
上一篇 2016-08-24 21:21
下一篇 2016-08-24 21:22

相关推荐

  • Linux进程及作业管理总结

    一、简介     在使用Windows操作系统中很多时候需要查看某些程序进程的运行情况,一般来说我们可以打开Windows提供的"任务管理器",然后点击"进程"栏即可查看到当前系统运行的进程列表。例如偶尔出现系统内存、CPU占用过高的时候,我们往往都会查看进程列表,并找到当前占用内存或CPU过高的进…

    Linux干货 2015-10-05
  • 用shell脚本实现每天定时收集全网日志到一台服务器

    需求 现在公司有这样一个需求,需要收集每天全网运行业务的设备上的某个特定目录底下的日志到一台服务器(这台服务器我们简称logserver),这并在这台logserver上生成以日期为名字的目录 解决思路: 在logserver的crontab里设置两个脚本,在当日晚上23:30执行脚本1收集当日即将被删除的全网脚本;在并在早上8:30执行脚本2,收集昨日全网…

    Linux干货 2015-07-27
  • ​iptables简单介绍

    iptables简单介绍 什么是防火墙? 防火墙是工作在主机或网络边缘,能够对其所匹配到的报文根据事先定义好的规则作出相应处理的组件,可以是软件,也可以是硬件,还能软硬结合实现。 UNIX/Linux中对防火墙的实现 早期在openBSD中通过内核中的ipfw实现简单的数据报过滤功能、后来在Linux 2.2内核中使用ipchains来取代,意为链、后来在L…

    Linux干货 2016-03-31
  • 内核编译流程和自动化安装

    内核编译         在特定的情况我们机器上面有些硬件特性需要利用起来,但是我们现成的这个内核没有开启这个功能,那就需要重新编译,把这个功能模块加进来,或者打到vmlinux中的核心文件里面。比如ntfs功能,默认系统没有启用此功能,但是系统是带这个功能的,编译的时候时候可以…

    Linux干货 2016-09-18
  • CollabNetSubversionEdge服务搭建

    准备目录并设置权限 [root@localhost ~]# mkdir /var/svn [root@localhost ~]# chown bohui:bohui /var/svn/ [root@localhost ~]# chmod 700 /v…

    Linux干货 2015-10-18
  • 循环结构

    循环结构 循环执行:     讲一段代码重复执行一次或多次          进入条件:条件满足时进入循环     退出条件:每一个循环都应该有退出条件,以有机会退出循环;   &…

    Linux干货 2016-08-21