Linux軟體包安裝與Shell指令碼程式設計
Linux軟體包安裝
二進位制軟體包管理:RPM與YUM
RPM軟體包例子:jdk-7u80-linux-x64.rpm
其中包括軟體名(jdk),版本號(7u80),適用平臺(linux-x64)
RPM管理
1、解除安裝
# rpm -e jdk
注:如果其他軟體包有依賴關係,解除安裝時會產生提示資訊,可使用--nodeps強行解除安裝
2、安裝
# rpm -ivh jdk-7u80-linux-x64.rpm
3、查詢是否安裝
#rpm -q jdk
#rpm -qa | grep jdk 列出所有已經被安裝的,名字中包含jdk字串的RPM包
|表示將輸出結果轉向到後面的命令處理,grep jdk表示在當前結果搜尋包含jdk字樣的字串
其他選項:
--excludedocs
不安裝軟體包中的文件檔案
--prefix path
將軟體包安裝到由path指定的路徑下
--test
只對安裝進行測試,並不實際安裝
安裝常見問題:
情況1 軟體包已經被安裝
#rpm -ivh jdk-7u80-linux-x64.rpm
提示:package jdk-7u80-linux-x64.rpm is already installed
如果想覆蓋此軟體包,可以在命令列上使用--replacepkgs選項
情況2:檔案衝突
#rpm -ivh jdk-7u80-linux-x64.rpm
提示:conflicts with file from ... Connot be installed
如果想讓rpm忽略該錯誤資訊,可以在命令列上使用--replacefiles選項
情況3:未解決依賴關係
rmp軟體包可能依賴於其他軟體包,在安裝了特定的軟體包才能安裝該軟體包
提示:failed dependencies .... ls needed by ....
你必須安裝完所依賴的軟體包,才能解決這個問題,或者使用--nodeps選項強制安裝
情況4:升級
#rpm -Uvh jdk-7u80-linux-x64.rpm
YUM包管理
應用yum的優勢:
(1)自動解決軟體包的依賴關係
(2)方便軟體包升級
安裝 yum install
檢測升級 yum check-update
升級 yum update
軟體包查詢 yum list
軟體包資訊 yum info
解除安裝 yum remove
幫助 yum -help、 man yum
4、查詢
-a 查詢所有已安裝的軟體包
-f 查詢檔案所屬軟體包
-p 查詢軟體包
-i 顯示軟體包資訊
-l 顯示軟體包中的檔案列表
-d 顯示被標註為文件的檔案列表
-c 顯示被標註為配置檔案的檔案列表
rpm查詢都有q 如rpm -qf
軟體包檔案提取
解壓所有檔案到當前目錄
Rpm2cpio 軟體包 | rpio -idv
解壓制定檔案到當前目錄
Rpm2cpio 軟體包 | cpio -idv ./etc/inittab
----------------------------------------------------------------------------------
Shell指令碼程式設計
Shell概念:
一、Shell是一個用C語言編寫的程式,這個應用程式提供了一個介面,使用者通過這個介面訪問作業系統核心的服務。Ken Thompson的sh是第一種Unix Shell,Window Explorer 是一個典型的圖形介面Shell。
二、Shell指令碼
是一種為shell編寫的指令碼程式。業界所說的shell通常都是指shell指令碼,shell和shell script是兩個不同的概念。
Shell環境:
Shell程式設計和java、php程式設計一樣,只要有一個能編寫程式碼得文字編輯器和一個能解釋執行的指令碼直譯器就可以了。
Linux的Shell種類眾多,常見的有:
(1) Bourne Shell (/usr/bin/sh或bin/sh)
(2) Bourne Again Shell (/bin/bash)
(3) C Shell (/usr/bin/csh)
(4) K Shell (/usr/bin/ksh)
(5) Shell for Root (/sbin/sh)
注:一般情況下,人們並不區分Bourne Shell 和Bourne Again Shell,所以想#!bin/sh,他同樣也可以改為#!/bin/bash。#!告訴系統其後路徑所指定的程式即是解釋此指令碼檔案的Shell程式。
Shell程式步驟
1、建立一個檔案,副檔名為.sh
2、修改檔案的許可權為可執行檔案
3、執行
Shell結構
1、#!用來指定執行指令碼的Shell
2、#註釋
3、命令和控制結構
Shell變數:
命名規則:
1、命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭
2、中間不能有空格,可以使用下劃線(_)。
3、不能使用標點符號
4、不能使用bash裡的關鍵字(可用help命令檢視保留關鍵字)
使用規則:
1、習慣用大寫字母來命名變數
2、賦值時,“=”前後不能有空格
3、命令的執行結果賦值給變數時使用返單引號 如:TIME=`date`
4、使用變數時,使用$變數名/${變數名}
只讀變數:使用readonly,此命令可以將變數定義為只讀變數,只讀變數的值不能被改變
刪除變數:使用unset,變數刪除後不能再次被使用,unset不能刪除只讀命令。
變數型別:
①臨時變數:也叫區域性變數,在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。
②永久變數:也叫環境變數,所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常執行,必要的時候shell指令碼也可以定義環境變數。
Shell字串(可以用單引號也可用雙引號)
單引號:
(1)單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的;
(2)單引號字串中不能出現單引號(對單引號使用轉義符後也不行)。
雙引號:
(1)雙引號裡可以有變數
(2)雙引號裡可以出現轉義字元
一、拼接字串
兩種方式:
1、無縫拼接
2、雙引號內直接使用變數
二、獲取字串長度
語法1:${#name}
語法2:expr length ${name}
三、提取子字串
語法: ${name:startindex:length}
${name:startindex}
${name:0-index:length}
${name:0-index}
注:還可以使用#、##、%、%%進行刪除後保留子串
#、##:表示從左邊開始刪除。
#:表示從左邊刪除到第一個指定的字元;
##:表示從左邊刪除到最後一個指定的字元。
%、%%:表示從右邊開始刪除
%:表示從右邊刪除到第一個指定的字元;
%%:表示從右邊刪除到最後一個指定的字元。
注:刪除包括指定的字元本身
從左邊刪除不知道左邊的個數所以*加指定字元,右邊刪除不知道右邊
的個數,指定字元加*
${url#*.}
${url%.*}
四、查詢子字串:
使用命令expr(使用改命令加` `)
ex: url="this is a good man"
index=`expr index "${url}" is`
echo $index -----輸出2
Shell陣列
使用規則
1、bash僅僅支援一維陣列,並且沒有限定陣列的大小。
2、陣列元素的下標從0開始。
3、獲取陣列中的元素要利用下標
4、下標使用不當,會報錯
一、定義陣列
語法1:arrayName=(值1 值2 ... 值n)
語法2:arrayName=(
值1
值2
..
值n
)
注意:元素間使用空格分隔開或者換行符
或者直接定義陣列的各個元素
name[0]=值1
name[1]=值2
...
name[n]=值n
二、讀取陣列
格式:${name[index]}
三、獲取陣列所有元素
格式:${name[*]}或{name[@]}
四、獲取陣列長度
格式:${#name[*]}或{#name[@]}
Shell解釋使用者執行的命令時,會將命令列的一串字元進行解析劃分成部分。每個部分都有一個固定的變數名$n,不能自定義。
$n: n從0開始,依次往後+1。從$1開始 叫位置引數變數。大於等於10時,必須使用{}將數字括起來
Ex:ls –la file1 file2 file3 ….. file10
$0 的值為:ls -la
$1 的值為file1
…….
${10} 的值為file10
$* 獲取所有引數,合併一個字串
$# 引數個數
$$ 當前程序ID
$! 後臺執行的最後一個程序的ID
$? 顯示最後一個命令的退出狀態。0表示沒有錯誤
Shell命令
一、read命令
從鍵盤讀取資料,賦值給變數 Ex: read username
注:當輸入的片語個數大於需要的引數個數,則多出的片語將被作為整體為最後一個引數接收。
Ex: read –p “請輸入密碼:” –n 6 -t 5 password
echo -e “\npassword is $password”
引數說明:
-p:輸出提示文字
-n 輸入字串長度,達到此長度,自動結束
-t 輸入限制時間
-s 隱藏輸入內 -e 處理特殊字元
二、expr命令
對整數型變數進行算術運算
Ex: 複雜計算:
expr 3 + 5 expr ` expr 5 - 1` / 2
expr 3 \* 5 num=` expr $var / 2`
三、echo命令
用於字串的輸出顯示
echo $var
echo It is a test file
開啟轉義 : -e
echo -e “ hello \n world”
echo -e “hellokitty \c”
\n #換行
\c #不換行
四、printf命令 (注:在此命令中轉義時要加雙引號否則無效)
與echo功能相同,用來輸出,功能更強大,如格式化字串,指定字串的寬度,左右對齊
方式,預設不換行,可以手動新增\n
語法:
printf format-string [arguments……...]
說明:
format-string: 格式控制字串
arguments: 引數值列表
%d %s %c %f 格式替代符詳解:
d: Decimal 十進位制整數 -- 對應位置引數必須是十進位制整數,
否則報錯!
s: String 字串 -- 對應位置引數必須是字串或者字元型,
否則報錯!
c: Char 字元 -- 對應位置引數必須是字串或者字元型,否則
報錯!
f: Float 浮點 -- 對應位置引數必須是數字型,否則報錯!
Ex:
printf “HelloWorld” #不會換行
printf “HelloWorld\n” #才會換行
printf “%-20s %-16s %-8s\n” 姓名 性別 體重
printf “%-20s %-16s %-8.2f\n” 張三 男 45.1234
printf “%-20s %-16s %-8.2f\n” 李四 男 76.5678
printf “%-20s %-16s %-8.2f\n” 王五 女 40.6543
Ex:
printf “%d %s\n” 1 “abc”
printf %s abcdef
printf %s abc def #此格式只指定了一個引數,但是多出的引數仍然會按照該格式輸出,格式被重用
printf “%s %s %s\n” a b c d e f g h I j
結果:a b c
d e f
h i j
printf “%s and %d” #沒有引數時,%s為空,%d為0
\b:推格
\f:換頁顯示
\n:換行
\r:回車
\t:水平製表符
\v:垂直製表符
\\:轉義斜槓
五、test命令(用於測試變數是否相等,是否為空、檔案型別等)
格式:test 測試條件
測試範圍:整數測試、字串測試、檔案測試
整數測試
test v1 -eq v2 測試兩個數是否相等
test v1 -gt v2 測試是否 v1>v2
test v1 -ge v2 測試是否 v1>=v2
test v1 -lt v2 測試是否 v1<v2
test v1 -le v2 測試是否 v1<=v2
test v1 -ne v2 測試兩個數是否不相等
字串測試
test str1 = str2 測試字串是否相等
test str1 != str2 測試字串是否不相等
test str1 測試字串是否不為空
test -n str1 測試字串是否不為空
test -z str1 測試字串是否為空
檔案測試
test -d file 指定檔案是否目錄
test -f file 指定檔案是否是常規檔案
test -x file 指定檔案是否可執行
test -r file 指定檔案是否可讀
test -w file 指定檔案是否可寫
test -a file 指定檔案是否存在
test -s file 檔案的大小是否非0
注1:通常test命令不單獨使用,而是與if語句連用
注2:使用中括號代替test,中括號兩邊及邏輯都需要空格空開
使用i++這等,需要使用let "i++",將這個字串執行
列表用集合表示{1..100}
流程控制語句
一、if-else分支結構
if 條件1
then 邏輯塊(通常都是命令)
elif 條件2
then 邏輯塊
else 邏輯塊
fi
寫成一行:適用於終端
if 條件;then 邏輯;fi
1、分支結構也可以進行巢狀
2、多個條件聯合
-a 邏輯與 當兩個條件都成立時,結果為true
-o 邏輯或 兩個條件只要有一個成立,結果為真
二、case多選擇語句
Case語句會匹配一個值和一個模式,匹配成功,執行相應邏輯塊
語法:
case 值 in
模式1) 邏輯塊
;;
模式2) 邏輯塊
;;
esac
三、for迴圈結構
格式:
for 變數 in 名字表
do 邏輯
done
寫成一行:
for 變數 in 列表;do 邏輯; done;
Ex:
for day in Sunday Monday Tuesday
WednesDay Thursday Friday SaturDay
do
echo “The day is:$day”
done
四、select表單迴圈
語法:
select 變數 in 列表
do
邏輯塊
done
寫成一行:
Select 變數 in 列表;do 邏輯 ; done;
五、while迴圈
語法:
while 條件
do
邏輯塊
done
六、無限迴圈
語法:
while :
do
邏輯塊
done
或
while true
Do
邏輯塊
done
七、until迴圈(執行邏輯直到ture時停止)
util 條件
do
邏輯塊
done
八、break與continue
如果想要提前結束迴圈(即想跳出迴圈)使用關鍵字break
如果想結束當次迴圈,進行下一次迴圈使用關鍵字continue
九、shift指令
作用:
引數左移,每執行一次,引數序列順次左移一個位置,$#的值少一個,多數用於分別處理每一個引數,移出去的引數不再可用
函式應用
語法:
[function] functionName()
{
邏輯
}
呼叫時,不帶()
說明:
1、關鍵字function,可以忽略不寫
2、return關鍵字,可加可不加,看需求
(1)加: 返回值只能是0~255的數字
(2)不加: 最後一條命令結果作為返回值
注意:
1、 函式內的變數,都是全域性變數(整個指令碼都可以使用)
2、函式的引數: 呼叫函式時,可以向函式中傳遞引數,必須通過$n的形式來獲取引數的值。
注:在給函式傳遞引數時,必須在呼叫是傳遞 method $1 $2
Shell輸出/輸入重定向
通常情況下: 系統命令會從你的終端接收輸入資料,再將需要輸出的資訊傳送給你的終端。
有時:我們可能會需要指定 輸入的位置,或者指定輸出的位置,這就是”重定向”的概念。
Shell檔案引入外部指令碼
概念:
Shell指令碼內部也可以引用其他外部指令碼這樣可以很方便的封裝一些公用的程式碼作為一個獨立的檔案。
Shell指令碼引用外部指令碼語法如下:
. fileName # .與檔案之間一定要有空格(. 指令碼路徑) 或者 source fileName
Shell指令碼除錯
1、sh -x script
這將執行該指令碼並顯示所有變數的值
2、sh -n script
不執行指令碼只是檢查語法的模式,將返回所有語法錯誤
awk命令應用
awk -F 域分隔符 ‘命令’
示例:
1、檢測系統中UID為0的使用者
awk –F: ‘$3==0 {print $1}’ /etc/passwd
2、檢測系統中密碼為空的使用者
awk –F: ‘length($2)==0 {print $1}’ /etc/shadow
相關推薦
Linux軟體包安裝與Shell指令碼程式設計
Linux軟體包安裝二進位制軟體包管理:RPM與YUMRPM軟體包例子:jdk-7u80-linux-x64.rpm其中包括軟體名(jdk),版本號(7u80),適用平臺(linux-x64)RPM管理1、解除安裝# rpm -e jdk注:如果其他軟體包有依賴關
Linux軟體包安裝與解除安裝,yum搭建本地倉庫,yum下載rpm包,安裝擴充套件源,更換國內源
Linux軟體包的安裝與解除安裝安裝軟體包的三種方法rpm工具 red hat package manager,紅帽公司開發的包管理軟體yum工具 Yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及Cen
linux軟體包安裝與解除安裝
7.1 安裝軟體包的三種方法 在Linux下安裝軟體包,主要有3種辦法 (1)rpm工具(手動安裝,難點在於包的依賴關係) (2)yum工具(python開發出來的工具,操作物件rpm包,能自動解決軟體包的依賴關係) (3)原始碼包(原始碼包需要同過編
Linux命令列與shell指令碼程式設計大全(二)
十一、處理使用者輸入 命令列引數 讀取引數: $0是程式名,$1是第一個引數,$2是第二個引數,以此類推,直到第9個引數$9。當引數個數超過10以後,需要在變數數字周圍加上花括號,如${10},如果輸入到命令列的引數是字串且含有空格,需要使用引號。 #! /bin/bash echo
Linux命令列與shell指令碼程式設計大全(一)
一、基本 bash shell命令 建立檔案 : touch 連結檔案:符號連結:是一個實實在在的檔案,兩個通過符號連結在一起的檔案,彼此的內容並不相同。使用ln -s命令。 硬連結:會建立獨立的虛擬檔案,其中包含了原始檔案的資訊及位置。但他們從根本上而言是同一個檔案。原始檔案必須事
Linux命令列與shell指令碼程式設計大全(三)
十二、呈現資料 輸入和輸出 標準檔案描述符 0 STDIN 標準輸入 &n
《Linux命令列與shell指令碼程式設計大全》讀書筆記————第三章 基本的bash shell命令
本章內容 1、使用shell 2、bash手冊 3、瀏覽檔案系統 4、檔案和目錄列表 5、管理檔案和目錄 6、檢視檔案內容 3.3 bash手冊 命令: man xterm 作用:檢視檢視xterm使用者手冊 man命
《Linux命令列與shell指令碼程式設計大全》讀書筆記————第一章 初識Linux shell
本章內容 1、什麼是Linux 2、Linux核心的組成 1、1 什麼是Linux Linux課劃分為以下四部分 a)Linux核心 b)GNU工具 c)圖形化桌面環境 d)應用軟體 1.1.1 深入探究Linux核心
Linux命令列與Shell指令碼程式設計大全(四)
一、建立函式 1.基本的指令碼函式 1.1 建立函式 function name { commands} 1.2 使用函式 在行中指定函式名就行了 ## 建立函式,注意函式名和大括號中間有空格,不然會報錯 function func1 { echo "
《linux命令列與shell指令碼程式設計大全》第三版
《linux命令列與shell指令碼程式設計大全》 全書4部分:☆ 【1】linux命令列(1-10章)☆ 【2】shell指令碼程式設計基礎(11-16章)☆ 【3】高階shell指令碼程式設計(17-23章):正則表示式☆ 【4】建立實用的指令碼(24-26章)>
學習《Linux命令列與shell指令碼程式設計大全》
【馬哥私房菜】親情推出《linux shell指令碼攻略》視訊教程 【馬哥私房菜】親情推出 git 視訊教程 《Linux命令列與shell指令碼程式設計大全》第三版 學習筆記 第1部分 Part 1 Linux 命令列 第1 章 初識
linux軟體包安裝rpm
查詢 rpm -qa |grep httpd cat /etc/shells zsh base源:理解為光碟的外部擴充套件映象 -ivh 安裝 -q 或者-qa zsh: 查詢有沒有安裝上 rpm -qa 查詢
linux軟體包安裝及自制yum源
程式的程式碼是用程式語言寫的給人看的(原始碼),計算機只能識別二進位制,因此程式要先編譯才能執行。系統安裝盤內建的安裝包提供的是最穩定執行的軟體版本,都是編譯好的rpm包,可以直接安裝。如果是自己下載
Linux思維導圖之shell指令碼程式設計基礎、習題
思維導圖百度雲分享:連結:https://pan.baidu.com/s/1UMvudlv-xEG_pFtOPdCWhg密碼:x6oa 路徑: 外部命令指令碼執行需在路下,cp到路徑某個路徑下或將外部命令路徑加到路徑裡在其他任何地方均可執行;或絕對路徑相對路徑都可以
CentOS7 軟體包安裝與解除安裝(轉自猿課阿銘老師)
1. rpm工具 rpm Redhat Package Manager, 設計理念是開放的,不僅僅是在RedHat平臺上,在SUSE上也是可以使用的。 rpm包名字構成由-和.分成了若干部分,如abrt-cli-2.0.8-15.el6.centos.i686.rpm,abrt-cli是包 名,2.0.8-1
Linux軟體的安裝與解除安裝方法
configure作用:是原始碼安裝軟體時配置環境用的 他根據你的配置選項和你的系統情況生成makefile檔案 為make 做準備 最常用的引數: ./configure --prefix 作用: 不指定prefix,則可執行檔案預設放在/usr/local/bin
Linux軟體包安裝(rpm、yum、apt-get)
rpm常用命令rpm -ivh 軟體包名稱 rpm -uvh 軟體包名稱 rpm -e 軟體名稱 rpm -qa | grep 軟體名稱 rpm -ql 軟體名稱 rpm -qf 檔案絕對路徑http://rpmfind.net/ yum常用命令(Redhat安裝rpm包)yum repolist yum
大資料技術學習筆記之linux基礎3-軟體管理與shell指令碼開發
一、Linux軟體管理 -》壓縮檔案管理 -》常見壓縮格式 -
Linux程式設計 18 安裝軟體程式(yum工具對軟體包安裝,刪除,更新介紹)
一. 概述 本篇介紹在linux上見到的各種包管理系統(package management system,PMS)用來進行軟體安裝,管理,刪除的命令列工具。PMS是利用一個數據庫來記錄各種相關內容,包括: linux系統上已安裝了什麼軟體包,每個包安裝了什麼檔案,每個已安裝軟體包的版本。 軟體包
Linux之shell指令碼程式設計例項--遍歷所有檔案,並按月份打成zip包
原始檔案形式如下圖: 經過shell指令碼處理之後,按月生成的zip包如下圖: 完成上述工作的shell指令碼如下: #下面這行程式碼並不是註釋,它的作用是表名該指令碼使用哪個shell直譯器 #! /bin/sh #變數賦值,等號=兩邊不能有空格 #需要處理的檔案目錄