shell 腳本 之循環 for while until 和 軟件包的管理 【上】

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  <etc.cpio 

         cpio –idv < etc.cpio

軟件運行環境

?API:Application Programming Interface 

        POSIX:Portable OS ? 

  程序源代碼 –> 預處理 –> 編譯 –> 匯編 –> 鏈接 

        靜態編譯: 

        共享編譯:.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

1×1=1

1×2=2 2×2=4

1×3=3 2×3=6 3×3=9

1×4=4 2×4=8 3×4=12 4×4=16

1×5=5 2×5=10 3×5=15 4×5=20 5×5=25

1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36

1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49

1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64

1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=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 

原創文章,作者:a1215276209,如若轉載,請注明出處:http://www.www58058.com/36843

(0)
a1215276209a1215276209
上一篇 2016-08-18 10:10
下一篇 2016-08-18 10:10

相關推薦

  • mysql cluster安裝部署

    一、安裝要求 安裝環境:CentOS-6.5-32bit 軟件名稱:mysql-cluster-gpl-7.2.25-linux2.6-i686.tar.gz 下載地址:http://mysql.mirror.kangaroot.net/Downloads/ 軟件包:mysql-cluster-gpl-7.2.25-linux2.6-i686.tar.gz …

    Linux干貨 2016-08-22
  • 運維架構之httpd

    Web Service 傳輸層:提供進程地址 Port number tcp:傳輸控制協議,面向連接,通信前需建立虛擬鏈路,結束后拆除;0-65535 udp:用戶數據報協議,無連接;0-65535 IANA 0-1023:眾所周知,永久分配給固定應用使用;22/tcp(ssh)、80/tcp(http)、443/tcp(https) 1024-41951:…

    系統運維 2018-06-04
  • N26_第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 演示: [root@joylin test]# who|cut -d” ” -f1|uniq root gentoo [root@joylin test]# who|cut -d” ” -f1|uniq -c 5 root 1 gentoo 或者 [root@joyl…

    Linux干貨 2017-02-21
  • 優云實踐:巧用Salt,實現CMDB配置自動發現

    隨著互聯網+新形勢的發展,越來越多的企業步入雙態(穩敏雙態)IT時代,信息化環境越來越復雜,既有IOE三層架構,也有VCE、Openstack等云虛擬化架構和互聯網化的分布式大數據架構。所以,企業急需建立一套合適的配置管理庫(CMDB),像人類“大腦”一樣統一存儲從基礎架構到業務應用各層面的配置信息,以便協調“身體”(運維系統)各部分完成復雜的運維工作。 C…

    系統運維 2016-07-26
  • Memcache存儲大數據的問題

    Memcache存儲大數據的問題   huangguisu       Memcached存儲單個item最大數據是在1MB內,如果數據超過1M,存取set和get是都是返回false,而且引起性能的問題。 我們之前對排行榜的數據進行緩存,由于排行榜在我們所有sql select…

    Linux干貨 2015-05-05
  • redis主從復制(2)— replication buffer與replication backlog

    1、redis主從復制過程先不解釋replication buffer和replication backlog,而先看看redis主從復制的過程。 redis的主從復制分為兩個階段: 1)同步(sync rdb snapshot):slave復制master的某時間點(t)的全量數據,t為master接收到slave的sync命令后執行rdb bgsave的…

    Linux干貨 2016-04-05
欧美性久久久久