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.www58058.com/37134
作業中的第五題:針對九九乘法表,今天學習了使用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