2016-08-16

授课内容:

shell脚本基础:循环,for,while,until(未讲完)

软件包管理(未讲完)

软件运行环境

软件包基础

Rpm包管理


循环执行

将某代码段重复运行多次

重复运行多少次:

循环次数事先已知

循环次数事先未知

有进入条件和退出条件


循环控制语句:

    break:【提结束循环,循环将不再执行】指前面的循环退出,退出后还继续执行后面的命令,而exit则是退出整个脚本

    continue:【提结束本轮循环,而进入下一轮循环】当碰到continue语句时,continue后面的语句不再执行,直接提前进入下一轮循环


for循环

for 变量名in 列表;do

循环体

done

列表:以空格隔开的包括数字、字符、文件等个体

执行机制:

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

例如:

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

 

#!/bin/bash
 
 #Version:1.0
 #Create time:2016-08-15 13:51:02
 #Description:写一个脚本,提示输入正整数n的值,计算1+2+3+…n的总和
 let SUM=0
 read -p "input num: " NUM
 expr $NUM + 0 &> /dev/null
 [ $? -ne 0 ] && echo "please input digitnum" && exit 100
 [ $NUM -le 0 ] && echo "input the right num" && exit 99
 for I in `seq $NUM`
 do
     SUM=$(($SUM+$I))
 done
 echo "the sum is $SUM"
 unset SUM
 unset NUM


while循环:

while CONDITION; do

循环体

done

进入条件:CONDITION为true;

退出条件:CONDITION为false

即当循环体是真是执行循环体,循环体是假是退出循环体

例如:

求100以内所有正整数之和

#!/bin/bash
#Version:1.0
#Create time:2016-08-15 14:36:00
#Description:求100以内所有正整数之和
let SUM=0
let NUM=1
while [ $NUM -le 100 ] 
do
    SUM=$(($SUM+$NUM))
    NUM=$(($NUM+1))
done
echo "1+2+...+100=$SUM"

until循环

until CONDITION; do

循环体

done

进入条件:CONDITION 为false

退出条件:CONDITION 为true

【】即当循环体是真是执行循环体,循环体是假是退出循环体,与while循环相反


软件包管理:

软件运行环境

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

注释内容在预处理时被去掉

ABI:Application Binary Interface

Windows与Linux不兼容,如ls命令不能再windows运行,因为uwindows和linux的ABI接口不同


包管理器:

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

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

程序包管理器:

debian:deb文件, dpkg包管理器

redhat: rpm文件, rpm包管理器,SUSE系列也是使用rpm包管理器

rpm: RedhatPackage Manager(初期)

RPM Package Manager (行业标准,类似GNU)

包命名

源代码: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

OS:el7,指的是RHEL7的版本

常见的arch:

x86: i386, i486, i586, i686(32位平台)

x86_64: x64, x86_64, amd64(64位平台)

powerpc: ppc

跟平台无关:noarch

包:一个rpm包里面包含多个文件

Application-VERSION-ARCH.rpm: 主包

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

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

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

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

解决依赖包管理工具:

yum:rpm包管理器的前端工具

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

由于一个二进制的执行程序包是由二进制文件、库文件、帮助文件和配置文件组成,所以每个包文件里包括:

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

RPM包内的文件

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

安装或卸载时运行的脚本

2、数据库(公共)

程序包名称及版本

依赖关系

功能说明

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

管理程序包的方式:

使用包管理器:rpm

使用前端工具:yum, dnf

rpm

1、安装

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

-v:显示详细情况

-h:以#显示进度

[install-options]:

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

--nodeps:忽略依赖关系

--replacepkgs| replacefiles

--nosignature: 不检查来源合法性

--nodigest:不检查包完整性

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

%pre: 安装前脚本;--nopre

%post: 安装后脚本;--nopost

%preun: 卸载前脚本;--nopreun

%postun: 卸载后脚本;--nopostun

2、升级

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

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

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

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

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

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

rpm -Uvh PACKAGE_FILE ...

rpm -Fvh PACKAGE_FILE ...

--oldpackage:降级

--force: 强行升级