1. 程式人生 > >Linux軟體包安裝與Shell指令碼程式設計

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系統上已安裝了什麼軟體包,每個包安裝了什麼檔案,每個已安裝軟體包的版本。   軟體包

Linuxshell指令碼程式設計例項--遍歷所有檔案,並按月份打成zip

原始檔案形式如下圖: 經過shell指令碼處理之後,按月生成的zip包如下圖: 完成上述工作的shell指令碼如下: #下面這行程式碼並不是註釋,它的作用是表名該指令碼使用哪個shell直譯器 #! /bin/sh #變數賦值,等號=兩邊不能有空格 #需要處理的檔案目錄