乾貨篇:Python基礎教程之shell編程資料大全

乾貨篇:Python基礎教程之shell編程資料大全

一.shell的作用和歷史

二.shell的常用功能

三.shell變數種類

四.shell腳本的運行

五.編寫簡單的shell腳本

一.Shell的作用及常見種類

Shell的作用 -- 命令解釋器,「翻譯官」

vim /etc/shells

二.Bash的常用功能

1. Tab鍵自動補齊

2.Bash的命令歷史

命令歷史

保存用戶曾經執行過的命令操作

存放位置:~/.bash_history 文件

查看歷史命令

使用↑、↓按鍵逐條翻看,允許編輯並重複執行

執行:history

清除歷史命令

執行:history -c

3.調用歷史命令

!n:執行歷史記錄中的第n條命令

!str:執行歷史記錄中以「str」開頭的命令

設置記錄歷史命令的條數

修改 HISTSIZE 參數(默認為1000條)

4.命令別名

為使用頻率較高的複雜命令行設置簡短的調用名稱

存放位置:~/.bashrc

查看命令別名

格式:alias [別名]

設置命令別名

執行:alias 別名=實際執行的命令

取消已設置的命令別名

格式:unalias 別名

5.Bash的標準輸入輸出

互動式硬體設備

標準輸入:從該設備接收用戶輸入的數據

標準輸出:通過該設備向用戶輸出數據

標準錯誤:通過該設備報告執行出錯信息

6.Bash的重定向操作

改變標準輸入、標準輸出、標準錯誤的方向

7.Bash的管道操作

管道操作符號「|」

連接左右兩個命令,將左側的命令輸出的結果,作為右側命令的輸入(處理對象)

格式:cmd1 | cmd2 [... | cmdn]

三.Shell變數的應用

1.Shell變數含義

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

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

2)變數值:能夠根據用戶設置、系統環境變化而變化

2.Shell變數的種類

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

環境變數:由系統維護,用於設置用戶的Shell工作環境,只有極少數的變數用戶可以修改

預定義變數:Bash預定義的特殊變數,不能直接修改

位置變數:通過命令行給程序傳遞執行參數

3.變數的賦值與引用

定義新的變數

變數名要以英文字母或下劃線開頭,區分大小寫

格式:變數名=變數值

查看變數的值

格式:echo $變數名

查看所有變數:set

清除變數

unset 變數名

[root@localhost ~]# DAY=Sunday

[root@localhost ~]# echo $DAY

Sunday

在查看變數時,如果變數名容易和後邊的字元串連在一起導致混淆,則應該使用大括弧將變數名括起來,使用形式為:${變數名} ,例如:

若已知變數Var的值為lamp,則執行「echo $Var3.0」命令後將顯示結果「.0」而不是「lamp3.0」,因為在該命令中,會將「Var3」當成變數名(默認未定義此變數)。若希望正確顯示「lamp3.0」的輸出結果,則需要執行「echo ${Var}3.0」

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

格式: read [-p "信息"] 變數名

結合不同的引號為變數賦值

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

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

反撇號 ` ` :將命令執行的結果輸出給變數

4.數值變數的運算

計算整數表達式的運算結果

格式:expr 變數1 運算符 變數2 ...[運算符 變數n]

expr的常用運算符

加法運算:+

減法運算: -

乘法運算: *

除法運算: /

求模(取余)運算: %

Bash程序並不適合進行強大的數學運算,例如小數或指數運算的,一般只能進行簡單的整數運算

對Shell變數進行數值運算時,更多的時候是用於腳本程序的過程式控制制,如控制程序的循環次數

在expr命令的使用格式中,變數與運算符間是有空格的,可以同時使用多個運算符、多個變數

由於星號「*」作為Bash環境中的通配符使用,因此乘法運算符需要使用「*」的特殊形式(轉義字元)

#!/bin/bash

read -p "please input num1:" -t 30 test1

read -p "input num2:" -t 30 test2

declare -i sum=」$test1+$test2」

echo 「num1 + num2 = $sum」

5.環境變數賦值

設置變數的作用範圍

格式:export 變數名...

export 變數名=變數值 [...變數名n=變數值n]

查看環境變數

env 或 export

清除用戶定義的變數

格式:unset 變數名

對於用戶自行定義的變數,默認只能在當前的Shell環境中使用,因此稱為局部變數

局部變數在新開啟的子Shell環境中是無效的(無法引用定義的變數) ,因此需要使用export命令將變數輸出為全局變數

只有對於全局變數,在當前Shell的子Shell環境(例如zsh)中,才能夠被正確引用

變數不存在或者值為空時,通過echo命令查看時將顯示一個空行

6.系統環境變數

環境變數配置文件

全局配置文件:/etc/profile

/etc/bashrc

用戶配置文件:~/.bash_profile

~/.bashrc

有完整登陸流程時,載入環境變數順序

先讀/etc/profile

再讀~/.bash_profile

再讀~/.bashrc

再讀/etc/bashrc

開始Bash界面

用set查看環境變數

[root@localhost root]# set

SHELL=/bin/bash

TERM=xterm

UID=0

USER=root

consoletype=pty

環境變數

常見的環境變數:

$USER 、$LOGNAME

$UID 、 $SHELL 、$HOME

$PWD、 $PATH

$PS1、$PS2

查看環境變數

[root@localhost ~]# echo $PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@localhost ~]# PATH="/opt/bin:$PATH"

[root@localhost ~]# echo $PATH

/opt/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

命令執行時查找順序

1、以相對/絕對路徑執行

2、由alias找到的執行

3、bash內部命令執行

4、按$PATH路徑執行

環境變數PS1

echo $PS1

d 日期 時間(24) T時間(12)

H 完整主機名 h 簡寫主機名

u 用戶名 v bash版本

w 完整目錄 W 最後一個目錄

# 執行了第幾個命令 $ 提示符

PS1=『[u@h W ##]$』

位置變數

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

$0為第0個參數,腳本本身

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

預定義變數

表示形式如下

$#:命令行中位置參數的個數

$*:所有位置參數的內容

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

$$:當前所在進程的進程號

$!:後台運行的最後一個進程號

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

[root@localhost ~]# bash

[root@localhost ~]# echo $0 $$

bash 5887

[root@localhost ~]# exxit

bash: exxit: command not found

[root@localhost ~]# echo $?

127

[root@localhost ~]# exit

exit

[root@localhost ~]# echo $?

0

輸出位置參數變數,腳本後要接參數

#!/bin/bash

echo "the command is $0"

echo "canshu1 is $1"

echo "canshu2 is $2"

輸出預定義變數

#!/bin/bash

echo "canshu zongshu $#"

echo "canshu libiao: $*"

echo $?

多命令運行

; 命令順序執行。

&& 前後命令的執行存在邏輯與關係,只有&&前面的命令執行成功後,它後面的命令才被執行。

|| 前後命令的執行存在邏輯或關係,只有||前面的命令執行失敗後,它後面的命令才被執行。

通配符與特殊符號

通配符

* 任意多個

? 任意一個

[] 括弧內任一個 [^0-9]非數字

特殊符號

轉義符

& 後台

! 非

四.Shell腳本的概念

Shell腳本

1.用途:完成特定的、較複雜的系統管理任務

2.格式:集中保存多條Linux命令,普通文本文件

3.執行方式:按照預設的順序依次解釋執行

編寫可執行的Shell腳本

建立包含執行語句的腳本文件

#腳本文件中包括的內容

運行環境設置:#!/bin/bash

注釋信息:以#開始的說明性文字

可執行的Linux命令行

為腳本文件添加可執行許可權

在腳本文件的各組成部分中,只有可執行語句是必不可少的(否則就不叫程序了)

當預設運行環境設置時,會自動由當前載入該腳本的Shell解釋器負責解釋執行

Shell腳本文件的擴展名並無嚴格的約束,不一定非得是「.sh」結尾的

給shell腳本增加執行許可權

[root@localhost ~]# vi repboot.sh

#!/bin/bash

# To show usage of /boot directory and mode of kernel file.

echo "Useage of /boot: "

du -sh /boot

echo "The mode of kernel file:"

ls -lh /boot/vmlinuz-*

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

運行Shell腳本程序

1.直接執行具有「x」許可權的腳本文件

例如:./repboot.sh

2.使用指定的解釋器程序執行腳本內容

例如:bash repboot.sh

3.通過source命令(或 . )讀取腳本內容執行

例如:souce repboot.sh 或 . hello.sh

腳本程序可以通過多種方式運行:

為腳本文件設置了可執行屬性後,在Shell命令行中可以直接通過腳本文件的路徑執行腳本程序

在調試階段可以使用Shell程序直接調用腳本文件,不要求腳本具有可執行許可權,格式是:bash 腳本名

使用Bash的內部命令「.」腳本文件執行時,將不會開啟新的Shell環境。使用這種方式時,腳本文件作為「.」命令的參數,因此同樣不要求具備可執行許可權。

五.Shell腳本應用示例

示例1:

每周五17:30清理FTP伺服器的公共共享目錄

檢查 /var/ftp/pub/ 目錄,將其中所有子目錄及文件的詳細列表、當時的時間信息追加保存到 /var/log/pubdir.log 日誌文件中,然後清空該目錄

[root@localhost ~]# vi /opt/ftpclean.sh

#!/bin/bash

date >> /var/log/pubdir.log

ls -lhR /var/ftp/pub >> /var/log/pubdir.log

rm -rf /var/ftp/pub/*

[root@localhost ~]# crontab -e

30 17 * * 5 /opt/ftpclean.sh

Shell腳本應用示例

示例2:

每隔3天對資料庫目錄做一次完整備份

統計 /usr/local/mysql/var 目錄佔用的空間大小、查看當前的日期,並記錄到臨時文件 /tmp/dbinfo.txt 中

將 /tmp/dbinfo.txt 文件、/usr/local/mysql/var 目錄進行壓縮歸檔,備份到/opt/dbbak/目錄中

備份後的包文件名中要包含當天的日期信息

最後刪除臨時文件/tmp/dbinfo.txt

[root@localhost ~]# vi /opt/dbbak.sh

#!/bin/bash

DAY=`date +%Y%m%d`

SIZE=`du -sh /usr/local/mysql/var`

echo "Date: $DAY" >> /tmp/dbinfo.txt

echo "Data Size: $SIZE" >> /tmp/dbinfo.txt

mkdir /opt/dbbak

cd /opt/dbbak

tar -zcPf mysqlbak-${DAY}.tar.gz /usr/local/mysql/var /tmp/dbinfo.txt

rm -f /tmp/dbinfo.txt

[root@localhost ~]# crontab -e

55 23 */3 * * /opt/dbbak.sh

更多Python學習資料,歡迎點擊進群向群主索要。 ←戳我


推薦閱讀:

AppleScript類自然語言與非英語語法設計
字元指針數組的使用--替換人名-題目分析
測試的道理
C++之函數/結構體/類 模板
讓我們做個簡單的解釋器(一)

TAG:Python | 編程語言 | Python教程 |