bash腳本之for循環和while循環及包管理

一.概述

上一章剩余內容

壓縮工具 cpio

復制從或到文件

cpio命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,它可以解壓以“.cpio”或者“.tar”結尾的文件。

cpio[選項] > 文件名或者設備名

cpio[選項] < 文件名或者設備名

選項

-o 將文件拷貝打包成文件或者將文件輸出到設備上

-i解包,將打包文件解壓或將設備上的備份還原到系統

-t 預覽,查看文件內容或者輸出到設備上的文件內容

-v 顯示打包過程中的文件名稱。

-d 解包生成目錄,在cpio還原時,自動的建立目錄

-c 一種較新的存儲方式

二.shell 腳本編程

循環執行

將某代碼段重復運行多次

重復運行多少次:

循環次數事先已知

循環次數事先未知

有進入條件和退出條件

for, while, until  

for 

while 當…

until 直到…

for循環

for 變量名in 列表;do

循環體

done

執行機制:

依次將列表中的元素賦值給“變量名”; 每次賦值后即執行一次循環體; 直到列表中的元素耗盡,循環結束

列表生成方式:

(1) 直接給出列表

(2) 整數列表:

(a) {start..end}

(b) $(seq[start [step]] end)

(3) 返回列表的命令

$(COMMAND)

(4) 使用glob,如:*.sh

(5) 變量引用;

$@, $*

until循環

until CONDITION; do

循環體

done

進入條件:CONDITION 為false

退出條件:CONDITION 為true

循環控制語句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

三.軟件包管理

1)概述

軟件運行環境

軟件包基礎

Rpm包管理

yum管理

定制yum倉庫

編譯安裝

軟件運行的環境

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

開發語言

系統級開發

C

C++

應用級開發

java

delphi

Python

go

php

perl

ruby

包管理器

二進制應用程序的組成部分:

二進制文件、庫文件、配置文件、幫助文件

查詢關聯的庫文件

例: ldd /bin/ls

程序包管理器:

debian:deb文件, dpkg包管理器

redhat: rpm文件, rpm包管理器

rpm: RedhatPackage Manager

RPM Package Manager

包的命名方式

源代碼: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

常見的arch:

x86: i386, i486, i586, i686

x86_64: x64, x86_64, amd64powerpc: 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

獲取程序包的途徑:

(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

https://sourceforge.net/

(4) 自己制作

注意:檢查其合法性:來源合法性,程序包的完整性

rpm包管理 (重點~!!!)

CentOS系統上使用rpm命令管理程序包:

安裝、卸載、升級、查詢、校驗、數據庫維護

安裝:

rpm {-i|–install} [install-options] PACKAGE_FILE…

-v: verbose

-vv:

-h: 以#顯示程序包管理執行進度

rpm -ivhPACKAGE_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 -UvhPACKAGE_FILE …

rpm -FvhPACKAGE_FILE …

–oldpackage:降級

–force: 強行升級

升級注意項

注意:

(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核

(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

1、判斷/var/目錄下所有文件的類型

blob.png

2、添加10個用戶user1-user10,密碼同用戶名

blob.png

3、/etc/rc.d/rc3.d目錄下分別有多個以K開頭和以S開頭的文件;分別讀取每個文件,以K開頭的文件輸出為文件加stop,以S開頭的文件輸出為文件名加start;

“K34filename stop”

“S66filename start”

blob.png

4、編寫腳本,提示輸入正整數n的值,計算1+2+3+…n的總和

blob.png

5、編寫腳本,提示請輸入網絡地址,如192.168.0.0,判斷輸入的網段中主機在線狀態    

blob.png

6、打印九九乘法表

blob.png

7.編寫腳本,刪除gid大于1000的組

blob.png

8.編寫腳本,求100以內所有正整數之和

blob.png

9.編寫腳本,通過ping命令探測172.16.250.1-254范圍內的所有主機的在線狀態,統計在線主機和離線主機各多少。

blob.png

10.編寫腳本,打印九九乘法表

blob.png

11.編寫腳本,利用變量RANDOM生成10個隨機數字,輸出這個10數字,并顯示其中的最大者和最小者

blob.png

12.編寫腳本,實現打印國際象棋棋盤

blob.png

13.每隔3秒鐘到系統上獲取已經登錄的用戶的信息;如果發現用戶hacker登錄,則將登錄時間和主機記錄于日志/var/log/login.log中,并提示該用戶退出系統。

blob.png

14.隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出。

blob.png

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

(0)
KartikKartik
上一篇 2016-08-24
下一篇 2016-08-24

相關推薦

  • Ansible淺談

    ansible特性:         模塊化,調用特定的模塊,完成特定的任務;         基于Python語言實現,由Paramiko、PyYAML和Jinja2三個關鍵模塊;         部署簡單,agentless; &nbs…

    Linux干貨 2016-12-15
  • N25第九周博客作業

    1、 寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/sh lg=0 nlg=0 while read line;do   if [[ “${line}” =~“/sbin/nol…

    Linux干貨 2017-03-06
  • vim編輯器練習&任務計劃&腳本編程練習

    請詳細總結vim編輯器的使用并完成以下練習題 vim總結: vi:Visual Interface,是一種文本編輯器,所謂文本數據是基于字符編碼的文件,常見的編碼有ASCII編碼,UNICODE編碼等等。 文本編輯器的種類:  行編輯模式:所謂行編輯器是指一行一行來編輯處理的工具,如sed。  全屏編輯器:編輯空間占據整個屏幕,如nano…

    Linux干貨 2016-10-31
  • systemd和systemctl

    systemd和systemctl(centos7)     Systemd是一種新的linux系統服務管理器。它替換了init系統,能夠管理系統啟動過程和一些系統服務,一旦啟動起來,就將監管整個系統。在centos7系統中,PID 1被systemd所使用了:如下,在centos6中: init─┬─NetworkManager &nb…

    Linux干貨 2016-10-09
  • N24_huamao 學習計劃

       每天會安排好時間按順序看視頻進行學習,由于基礎比較差我會先進行筆記然后再做博客記錄。需要操作的知識點會跟著視頻和自己的理解去做,最后達到馬哥所說的“技能”所需的要求。運維的知識點很廣很多也很復雜。當然想學好后邊的就要先打好基礎從linux系統開始學習把重要的命令記牢應用靈活才可以。這第一步自己一定要邁好。

    Linux干貨 2016-10-26
  • Mysql備份III

    Mysql備份III Mysqldump和mysqldumper A備份和恢復所有庫 $ time mysqldumo –all-databases > /mysql/backup/date.time.database.dump.sql $ echo $? $ ls&nbs…

    Linux干貨 2016-06-09
欧美性久久久久