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 21:21
下一篇 2016-08-24 21:22

相關推薦

  • Homework Week-9 bash腳本之順序、選擇、循環

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash #Elephant echo "nologin users:" user1=$(cat /etc/passwd&n…

    Linux干貨 2016-10-17
  • CentOS 更改改網卡名稱

    1 查看你的CentOS7網卡名字叫什么(通常第一個網卡叫做eno16777736) ip addr 2 編輯配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 把配置文件里面所有eno16777736改為eth0 3 把網卡配置文件名字也修改一下 cd?/etc/sysconfig/networ…

    2018-01-18
  • 是否

    是否

    Linux干貨 2016-08-22
  • 任務計劃1

    at.allow :優先級高,有此文件,deny無效,只有此文件中的用戶可使用at at.deny:優先級低,此文件中的用戶拒絕,不在此文件允許 如果都沒有,全都拒絕普通用戶     [root@localhost ~]# rpm -q  at at-3.1.13-22.el7.x86_64 [root@localhost ~]…

    Linux干貨 2017-05-15
  • 計算機的組成及其功能

    計算機由運算器,控制器、存儲器及輸入、輸出裝置五部分組成。 第一,運算器(Arithmetical and Logical Unit),也稱作算術邏輯單元,主要是對數據進行各種運算。 第二,控制器(Control Unit)是計算機的控制中心,協調各計算機各部分按照預先的目標和步驟有序的工作??刂破鲝拇鎯ζ髦兄饤l取出指令,分析每條指令規定的操作和所需數據的存…

    Linux干貨 2016-09-17
  • Linux運維學習歷程-第七天-Linux文本工具及正則表達式

    文本處理工具: Linux文本處理三劍客:   grep、egrep、fgrep:文本過濾工具(模式:pattern)工具      grep:基本正則表達式 -E -F      egrep:擴展正則表達式 -G -F      fgrep:不支持正則表達式…

    Linux干貨 2016-08-10
欧美性久久久久