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

相关推荐

  • 开篇

    正式开始学习的第一天,了解LINUX,爱上LINUX。希望在往后的日子里越战越勇!!

    Linux干货 2017-07-11
  • 8-15作业

    1、写个脚本,实现以下三角形    *   ***  ***** ******* #!/bin/bash # read -p " input a number : " n for l&nbs…

    Linux干货 2016-08-21
  • MySQL 简述

    1 概述
    2 安装
    3 数据库的操作
    4 注意事项

    Linux干货 2017-09-25
  • linux 网络管理

    1、ifconfig命令格式: ifconfig[interface] 查看IP ifconfig-a 查看全部网卡信息 ifconfigIFACE [up|down] 网卡开启关闭 ifconfigIFACE IP/netmask [up] ifconfigIFACE IP netmask NETMASK 命令立即生效,不能永久保存  &nbsp…

    Linux干货 2017-08-20
  • bash

    1.  bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示           状态返回值:            &nbsp…

    Linux干货 2016-11-06
  • puppet进阶管理之终极应用

         上一篇博客写了puppet操作file、cron、user、group、exec基础资源的使用,连接地址为 http://www.178linux.com/13990  这次实验puppet的操作Package、Server和puppet的特殊资源属性Metaparameters。 回顾下…

    Linux干货 2016-04-12