设为首页 收藏本站
查看: 1154|回复: 0

shell 脚本 之循环 for while until 和 软件包的管理 【上】

[复制链接]

尚未签到

发表于 2018-8-27 11:15:15 | 显示全部楼层 |阅读模式
  shell 脚本 之循环 for while until 和 软件包的管理 【上】
  循环执行
  将某代码段重复运行多次
  重复运行多少次:
  循环次数事先已知
  循环次数事先未知
  有进入条件和退出条件
  for, while, until
  for 变量名 in 列表;do
  循环体
  done
  执行机制: 依次将列表中的元素赋值给“变量名”; 每次赋值后即执 行一次循环体; 直到列表中的元素耗尽,循环结束
  列表生成方式:
  (1) 直接给出列表
  (2) 整数列表: (a) {start..end} (b) $(seq [start [step]] end)
  (3) 返回列表的命令 $(COMMAND)
  (4) 使用glob,如:*.sh
  (5) 变量引用; $@, $*
  while循环
  while CONDITION; do
  循环体
  done
  CONDITION:循环控制条件;进入循环之前,先做一次判 断;每一次循环之后会再次做判断;条件为“true”,则执行 一次循环;直到条件测试状态为“false”终止循环
  因此:CONDTION一般应该有循环控制变量;而此变量的值 会在循环体不断地被修正
  进入条件:CONDITION为true;
  退出条件:CONDITION为false
  until循环 until CONDITION; do
  循环体
  done
  进入条件: CONDITION 为false
  退出条件: CONDITION 为true
  循环控制语句 之 continue and break
  循环控制语句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
  创建无限循环
  while true; do
  循环体
  done
  until false; do
  循环体
  Done
  解压归档 之 tar
  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/
  结合压缩工具实现:归档并压缩 -j: bzip2, -z: gzip, -J: xz
  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   预处理 --> 编译 --> 汇编 --> 链接
  静态编译:
  共享编译:.so
  ABI:Application Binary Interface
  Windows与Linux不兼容
  ELF(Executable and Linkable Format)
  PE(Portable Executable)
  库级别的虚拟化:
  Linux: WINE
  Windows: Cywin
  包管理器
  二进制应用程序的组成部分:
  二进制文件、库文件、配置文件、帮助文件
  程序包管理器:
  debian:deb文件, dpkg包管理器
  redhat: rpm文件, rpm包管理器
  rpm: Redhat Package Manager
  RPM  Package Manager
  包命名
  rpm包命名方式:
  name-VERSION-release.arch.rpm
  VERSION:
  major.
  minor.
  release
  release:release.OS
  常见的arch: x86: i386, i486, i586, i686 x86_64: x64, x86_64, amd64
  powerpc: 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
  rpm包管理
  CentOS系统上使用rpm命令管理程序包:
  安装、卸载、升级、查询、校验、数据库维护
  安装:
  rpm {-i|--install} [install-options] PACKAGE_FILE…
  -v: verbose
  -vv:
  -h: 以#显示程序包管理执行进度
  rpm -ivh PACKAGE_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 -Uvh PACKAGE_FILE ...
  rpm -Fvh PACKAGE_FILE ...
  --oldpackage:降级
  --force: 强行升级
  升级注意事项
  (1) 不要对内核做升级操作;Linux支持多内核版本并存,因此 ,对直接安装新版本内核
  (2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本
  的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而 把新版本的文件重命名(FILENAME.rpmnew)后保留
  1、求100以内所有正整数之和
  #!/bin/bash
  read -p "first number:" a
  read -p "second number:" b
  [ $a -ge $b ] && echo "sum is `seq -s+ $b $a | bc`" || echo "sum is `seq -s+ $a $b | bc`"
  [root@localhost bin]# bash shushu.sh
  first name is a:2
  second name is b:100
  sum= 5049
  2、通过ping命令探测172.16.250.1-254范围内的所有主机 的在线状态,统计在线主机和离线主机各多少。
  #!/bin/bash
  read -p "please input a IPv4:" ip
  up=0 down=0
  ipv4=`echo $ip|cut -d. -f1-3`
  for ipv in {0..255} ;do
  IP="$ipv4"."$ipv"
  ping "$IP" -c 1 -W 1 &>/dev/null && echo "The Up IPv4 is:$IP" && let up+=1 &>/dev/null || let down+=1 &>/dev/null
  done
  echo "IPv4($ipv4.1-255) up is :$up"
  echo "IPv4($ipv4.1-255) down is :$down"
  3、打印九九乘法表
  for i in  {1..9};do
  for j in $(seq 1 $i) ;do
  echo -ne "${j}x${i}=$[i*j]\t"
  done
  echo
  done
  电脑演示
  [root@localhost bin]# vim 999.sh
  [root@localhost bin]# bash 999.sh
  1x1=1
  1x2=22x2=4
  1x3=32x3=63x3=9
  1x4=42x4=83x4=124x4=16
  1x5=52x5=103x5=154x5=205x5=25
  1x6=62x6=123x6=184x6=245x6=306x6=36
  1x7=72x7=143x7=214x7=285x7=356x7=427x7=49
  1x8=82x8=163x8=244x8=325x8=406x8=487x8=568x8=64
  1x9=92x9=183x9=274x9=365x9=456x9=547x9=638x9=729x9=81
  4、利用变量RANDOM生成10个随机数字,输出这个10数字 ,并显示其中的最大者和最小者
  #!/bin/bash
  declare -i max=0
  declare -i min=0
  for i in {1..10} ;do
  tmp=$RANDOM
  [ $i -eq 1 ] && min=$tmp
  if [ $i -le 9 ] ;then
  echo -n "$tmp"
  else
  echo "$tmp"
  fi
  if [ $tmp -gt $max ] ;then
  max=$tmp
  elif [$tmp -lt $min ] ;then
  min=$tmp
  fi
  done
  echo "the max random is $max"
  echo "the min random is $min"
  5、打印国际象棋棋盘
  1#!
  2 #
  3 for i in $(seq 1 8);do
  4 for j in $(seq 1 8);do
  5 [ $[i%2-$j%2] -eq 0 ] &&  echo -ne "\033[41m  \033[0m" ||  echo -ne "\033[47    m  \033[0m"
  6 let j++
  7 done
  8 echo ""
  9 let i++
  10 done
  11


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-557247-1-1.html 上篇帖子: shell脚本编程-循环语句练习 下篇帖子: shell 2 俄罗斯方块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表