shell编程、程序包管理及习题
一、编程语句
1、while 循环
while CONDITION; do
循环体
done
CONDITION :循环控制条件;进入循环之前,先做一次判
断;每一次循环之后会再次做判断;条件为“true” ,则执行
一次循环;直到条件测试状态为“false” 终止循环
因此:CONDTION 一般应该有循环控制变量;而此变量的值
会在循环体不断地被修正
进入条件:CONDITION 为true;
退出条件:CONDITION 为false;
2、until 循环
until CONDITION; do
循环体
done
进入条件: CONDITION 为false
退出条件: CONDITION 为true
3、循环控制语句continue
用于循环体中
continue [N] :提前结束第N 层的本轮循环,而直接进入下一
轮判断;最内层为第1层 层
while CONDTIITON1; do
CMD1
…
if CONDITION2; then
continue
fi
CMDn
…
done
4、循环控制语句break
用于循环体中
break [N] :提前结束第N 层循环, 最内层为第1层
while CONDTIITON1; do
CMD1
…
if CONDITION2; then
break
fi
CMDn
…
done
二、打包压缩
tar [OPTION]…
(1) 创建归档
tar -c -f / PATH/TO/SOMEFILE .tar FILE…
tar cf / PATH/TO/SOMEFILE .tar FILE…
(2) 查看归档文件中的文件列表
tar -t -f /PATH/TO/SOMEFILE .tar
(3) 展开归档
tar -x -f /PATH/TO/SOMEFILE .tar
tar -x -f /PATH/TO/SOMEFILE .tar -C /PATH/
v 结合压缩工具实现:归档并压缩
-j: bzip2, -z: gzip, -J: xz
30
cpio
复制 从或到文件
cpio 命令是通过重定向的方式将文件进行打包备份,还原恢复
的工具,它可以解压以“.cpio” 或者“.tar” 结尾的文件。
cpio [ 选项] > 文件名或者设备名
cpio [ 选项] < 文件名或者设备名
选项
-o 将文件拷贝打包成文件或者将文件输出到设备上
-i 解包,将打包文件解压或将设备上的备份还原到系统
-t 预览,查看文件内容或者输出到设备上的文件内容
-v 显示打包过程中的文件名称。
-d 解包生成目录,在cpio 还原时,自动的建立目录
-c 一种较新的存储方式
实例
将 将etc 目录备份:
find ./etc -print |cpio -ov >etc.cpio
内容预览
cpio –tv < etc.cpio
要解包文件
cpio –iv <etc.cpio
cpio –idv < etc.cpio
三、rpm包管理
1、包管理器
二进制应用程序的组成部分:
二进制文件、库文件、配置文件、帮助文件
程序包管理器:
debian :deb 文件, dpkg 包管理器
redhat: rpm 文件, rpm 包管理器
rpm: Redhat Package Manager
RPM Package Manager
2、包文件组成
程序包管理器:
功能:将编译好的应用程序的各组成文件打包一个或几个
程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、
升级和校验等管理操作
1)包文件组成 、包文件组成 ( 每个包独有)
RPM 包内的文件
RPM 的元数据,如名称,版本,依赖性,描述等
安装 或卸载时运行的脚本
2 )、数据库( 公共)
程序包名称及版本
依赖 关系
功能 说明
包安装后生成的各文件路径及校验码信息
3、程序包的来源
管理程序包的方式:
使用包管理器: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
4、rpm 包管理
1)CentOS 系统上使用rpm 命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
安装:
rpm {-i|–install} [install-options] PACKAGE_FILE…
-v: verbose
-vv:
-h: 以# 显示程序包管理执行进度
rpm -ivh PACKAGE_FILE …
2)rpm 包安装
[install-options]
–test: 测试安装,但不真正执行安装;dry run 模式
–nodeps :忽略依赖关系
–replacepkgs | replacefiles
–nosignature: 不检查来源合法性
–nodigest :不检查包完整性
–noscipts :不执行程序包脚本片断
%pre: ; 安装前脚本; –nopre
%post: ; 安装后脚本; –nopost
%preun: ; 卸载前脚本; –nopreun
%postun: 卸载后脚本; –nopostun
3)rpm 包升级
升级:
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: 强行升级
习题
用until实现下列作业(有些习题不会做,等老师下次上课,我好好跟着老师做做)
1、每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并提示该用户退出系统。
2、随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出.
答:
3、编写脚本,求100以内所有正整数之和
答:
4、编写脚本,通过ping命令探测10.1.44.1-254范围内的所有主机的在线状态,统计在线主机和离线主机各多少。
答:
5、编写脚本,打印九九乘法表
6、编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者
答:
7、编写脚本,实现打印国际象棋棋盘
答:
8、打印等腰三角形
答:
9、安装centos6.7,用centos6.8kernel升级
答:
原创文章,作者:178babyhanggege,如若转载,请注明出处:http://www.178linux.com/37134
评论列表(2条)
作业中的第五题:针对九九乘法表,今天学习了使用for(()),具体编程如下:
“for999.sh” 8L, 147C
#!/bin/bash
for ((i=1;i <= 9;i++ ));do
for (( j=1;j <=i;j++ ));do
echo -ne "$j*$i=$[$i*$j]\t"
done
echo " "
done
作业中的第八题,答案
[root@centos6bin]#cat sanjiao.sh
#!/bin/bash
read -p “number:” n
for j in `seq $n` ;do
for a in `seq $[$n-$j]`;do
echo -n ” ”
done
b=$[$j*2-1]
for m in `seq $b`;do
echo -n “*”
done
echo
done