第六章 Shell指令碼應用(一)

2021-10-10 05:02:21 字數 4311 閱讀 7562

**技能展示

1.掌握shell指令碼的基礎知識

2.學會使用shell變數

3.學會編寫簡單的shell指令碼 **

shell的作用

1.shell的作用 —— 命令直譯器,「翻譯官」

介於系統核心與使用者之間,負責解釋命令列

2.使用者的登入shell

登入後預設使用的shell程式,一般為 /bin/bash

不同shell的內部指令、執行環境等會有所區別

[root@localhost ~]# cat /etc/shells

/bin/sh

/bin/bash

/sbin/nologin

編寫第乙個shell指令碼

1.編寫指令碼**

使用vi文字編輯器

每行一條linux命令,按執行順序依次編寫

[root@localhost ~]# vi first.sh

cd /boot/

pwdls -lh vml*

2.賦予可執行許可權

使指令碼具有可執行屬性

[root@localhost ~]# chmod +x first.sh

必須有 x 許可權

[root@localhost ~]# ./first.sh

不要求 x 許可權

[root@localhost ~]# sh /first.sh

[root@localhost ~]# source /first.sh

4.更完善的指令碼構成

指令碼宣告 第1行 宣告指令碼執行的環境

注釋資訊 以『#』開頭的行為注釋行

可執行語句

[root@localhost ~]# vi /first.sh

重定向與管道操作

1.互動式硬體裝置

標準輸入:從該裝置接收使用者輸入的資料

標準輸出:通過該裝置向使用者輸出資料

標準錯誤:通過該裝置報告執行出錯資訊

【型別】【裝置檔案】【檔案描述編號】【預設裝置】

標準輸入;/dev/stdin ;0 ;鍵盤

標準輸出;/dev/stdout; 1 ;顯示器

標準錯誤輸出;/dev/stderr; 2;顯示器

2.重定向操作

【型別】【操作符】【用途】

重定向輸入 ; < ; 從指定的檔案讀取資料,而不是從鍵盤輸入

重定向輸出; > ;將輸出結果儲存到指定的檔案(覆蓋原檔案)

重定向輸出;>>; 將輸出結果追加到指定的檔案

標準錯誤輸出;2> ;將錯誤資訊儲存到指定的檔案(覆蓋原檔案)

標準錯誤輸出;2>>; 將錯誤資訊追加到指定的檔案中

混合輸出;&> ; 將標準輸出、標準錯誤的內容儲存到同乙個檔案中

3.管道操作符號「|」

將左側的命令輸出結果,作為右側命令的處理物件

格式:cmd1 | cmd2 [… | cmdn]

[root@localhost ~]# grep 「bashkatex parse error: expected 'eof', got '#' at position 144: …ot@localhost ~]#̲ grep 「bash」 /etc/passwd | awk -f: 『』

root /bin/bash

teacher /bin/bash

shell變數的作用、型別

1.變數的作用

為靈活管理linux系統提供特定引數,有兩層意思:

變數名:使用固定的名稱,由系統預設或使用者定義

變數值:能夠根據使用者設定、系統環境的變化而變化

2.變數的型別

自定義變數:由使用者自己定義、修改和使用

環境變數:由系統維護,用於設定工作環境

位置變數:通過命令列給指令碼程式傳遞引數

預定義變數:bash中內建的一類變數,不能直接修改

自定義變數

1.定義乙個新的變數

格式:變數名=變數值

變數名以字母或下劃線開頭,區分大小寫,建議全大寫

2.檢視變數的值

格式:echo $變數名

[root@localhost ~]# product=benet

[root@localhost ~]# version=4.0

[root@localhost ~]# echo $product

benet

[root@localhost ~]# echo $product $version

benet 4.0

當變數名稱容易和緊跟其後的其他字元混淆時,需要使用{} 將變數名稱括起來

3.賦值時使用引號

雙引號:允許通過$符號引用其他變數值

單引號:禁止引用其他變數值,$視為普通字元

反撇號:命令替換,提取命令執行後的輸出結果

或者可以 $() 替代—多用,可以處理巢狀命令

4.從鍵盤輸入內容為變數賦值

格式: read [-p 「提示資訊」] 變數名

5.設定變數的作用範圍

區域性變數與全域性變數

區域性變數:只在當前shell環境中有效

全域性變數:在所有shell環境中有效

格式1:export 變數名 …

格式2: export 變數名=變數值 …

—— 兩種格式可以混合使用

[root@localhost ~]# echo 「$product $version」

benet 4.0

匯出為全域性變數

[root@localhost ~]# export product version

[root@localhost ~]# bash

子程式引用全域性變數

[root@localhost ~]# echo 「$product $version」

benet 4.0

[root@localhost ~]# exit

6.整數變數的運算

格式:expr 變數1 運算子 變數2 [運算子 變數3] …

7.常用運算子

加法運算:+

減法運算: -

乘法運算: *

除法運算: /

求模(取餘)運算: %

$() — 命令巢狀``

${} ----- 解決變數名混淆問題

$(()) — 實現整數的混合運算

特殊的shell變數

1.環境變數

由系統提前建立,用來設定使用者的工作環境

配置檔案: /etc/profile、~/.bash_profile

檢視當前環境變數

2.常見的環境變數:

pwd、path

user 、shell、home

[root@localhost ~]# echo katex parse error: expected 'eof', got '#' at position 119: …ot@localhost ~]#̲ path="path:/root"

[root@localhost ~]# echo $path

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:

/usr/bin:/root/bin:/root

2.位置變數

表示為 $n,n為1~9之間的數字

[root@localhost ~]# ./myprog.sh one two three four five six

$1,第1個位置引數

$2,第2個位置引數

$6,第6個位置引數

3.預定義變數

$#:命令列中位置變數的個數

$:所有位置變數的內容

$?:上一條命令執行後返回的狀態,當返回狀態值為0時表示執行正常,非0值表示執行異常或出錯

$0:當前執行的程序/程式名

[root@localhost ~]# cat mybak.sh

!/bin/bash

tarfile=beifen-date +%f.tgz

tar zcf $tarfile $ &> /dev/null

echo 「已執行 $0 指令碼,」

echo 「共完成 $# 個物件的備份」

echo 「具體內容包括: $*」

[root@localhost ~]# ./mybak.sh /etc/passwd /etc/shadow

已執行 ./mybak.sh 指令碼,

共完成 2 個物件的備份

具體包括:/etc/passwd /etc/shadow

shell 第六章 陣列應用

第六章 shell陣列應用 1.陣列基本概述 2.陣列基本使用 3.陣列遍歷與迴圈 01.什麼是陣列?陣列其實也算是變數,傳統的變數只能儲存乙個值,但陣列可以儲存多個值。02.陣列的分類 shell陣列分為普通陣列和關聯陣列。普通陣列 只能使用整數作為陣列索引。關聯陣列 可以使用字串作為陣列索引。0...

mysql第六章 第六章 mysql日誌

第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...

第六章 指標

1.多位元組資料的位址是在最左邊還是最右邊的位置,不同的機器有不同的規定,這也正是大端和小端的區別,位址也要遵從邊界對齊 2.高階語言的乙個特性就是通過名字而不是位址來訪問記憶體的位置,但是硬體仍然通過位址訪問記憶體位置 3.記憶體中的變數都是義序列的0或1的位,他們可以被解釋為整數或者其他,這取決...