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: 强行升级
本文出自 “6638225” 博客,转载请与作者联系!
原文地址:http://6638225.blog.51cto.com/6628225/1839444