您的位置:首页 > 运维架构 > Linux

linux基础学习-第十一天(脚本循环、软件包管理)

2016-08-17 09:41 706 查看
2016-08-16
授课内容:
shell脚本基础:循环,for,while,until(未讲完)
软件包管理[b](未讲完):[/b]
软件运行环境
软件包基础
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: 强行升级
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 软件包