Shell腳本的概念
- 將要執行的命令按順序保存到一個文本文件
- 給該文件可執行權限,便可運行
- 可結合各種Shell控制語句以完成更復雜的操作
Shell腳本應用場景
- 重複性操作
- 批量事務處理
- 自動化運維
- 服務運行狀態監控
- 定時任務執行
- .......
Shell的作用——命令解釋器,“翻譯官”
- 介於系統內核與用戶之間,負責解釋命令行
用戶的登錄Shell
- 登錄後默認使用的
Shel
l程序,一般爲/bin/bash
-
不同Shell的內部指令、運行環境等會有所區別
[root@localhost ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin ......
編寫腳本代碼
- 使用
vi
文本編輯器 - 每行一條
Linux
命令,按執行順序依次編寫
[root@localhost ~]# vim first.sh
cd /boot/
pwd
ls -lh vml*
賦予可執行權限
- 使腳本具有可執行屬性
[root@localhost ~]# chmod +x first.sh
執行腳本文件
-
方法一:腳本文件路徑(絕對路徑與相對路徑)
[root@localhost ~]# ./first.sh //必須擁有x(執行)權限,執行文件,但不會改變所在路徑
-
方法二:sh腳本文件路徑
[root@localhost ~]# sh /first.sh //執行文件,但不會改變所在路徑
-
方法三:source腳本文件路徑
[root@localhost ~]# source /first.sh
-
方法四:. 腳本文件路徑
[root@localhost ~]# . /first.sh
更完善的腳本構成
- 腳本聲明
- 註釋信息
- 可執行語句
[root@localhost ~]# vim /first.sh #!/bin/bash # This is my first Shell-Script. cd /boot echo "當前的目錄位於:” //輸出友好提示信息 pwd echo "其中以vmI開頭的文件包括:” Is -Ih vml*
重定向與管道操作
交互式硬件設備
- 標準輸入:從該設備接收用戶輸入的數據
- 標準輸出:通過該設備向用戶輸出數據
- 標準錯誤:通過該設備報告執行出錯信息
類型 | 設備文件 | 文件描述編號 | 默認設備 |
---|---|---|---|
標準輸入 | /dev/stdin |
0 |
鍵盤 |
標準輸出 | /dev/stdout |
1 |
顯示器 |
標準錯誤 | /dev/stderr |
2 |
顯示器 |
重定向操作
類型 | 操作符 | 用途 |
---|---|---|
重定向輸入 | < |
從指定的文件讀取數據,而不是從鍵盤輸入 |
重定向輸出 | > |
將輸出結果保存到指定的文件(覆蓋原有內容) |
>> |
將輸出結果追加到指定的文件 | |
標準錯誤輸出 | 2> |
將錯誤信息保存到指定的文件(覆蓋原有內容) |
2>> |
將錯誤信息追加到指定的文件中 | |
混合輸出 | &> |
將標準輸出、標準錯誤的內容保存到同一個文件中 |
管道操作符號“|”
-
將左側的命令輸出結果,作爲右側命令的處理對象
cmd1 | cmd2 [...| camdn]
[root@locadhost ~]# grep "bash$" /etc/passwd root:x:0:0:root:/root:/bin/bash Teacher:/home/teacher:/bin/bash [root@localhost ~]# grep“bash$”letc/passwd I awk -F: '{print $1,$7}' root /bin/bash teacher /bin/bash
Shell變量的作用、類型
變量的作用
-
爲靈活管理
Linux
系統提供特定參數,有兩層意思-
變量名:使用固定的名稱,由系統預設或用戶定義
- 變量值:能夠根據用戶設置、系統環境的變化而變化
變量的類型
-
- 自定義變量:由用戶自己定義、修改和使用
- 環境變量:由系統維護,用於設置工作環境
- 位置變量:通過命令行給腳本程序傳遞參數
- 預定義變量:
Bash
中內置的一類變量,不能直接修改自定義變量
- 變量名以字母或下劃線開頭,區分大小寫,建議全大寫
變量名=變量值
查看變量的值
echo $變量名
[root@locadhost ~]# Rroduct=Python Version=2.7.13 [root@locadhost ~]# ehco $Product Python [root@locadhost ~]# ehco $Product $Version Python 2.7.13
賦值時使用引號
- 雙引號:允許通過
$
符號引用其他變量值 - 單引號:禁止引用其他變量值,
$
視爲普通字符 - 反撇號:命令替換,提取命令執行後的輸出結果
從鍵盤輸入內容爲變量賦值
resd [-p "提示信息"] 變量名
面向對象:將建好的對象直接調用過來使用
面向過程:每個過程都要自己輸入
設置變量的作用範圍
格式1:export 變量名 ...
格式2:export 變量名=變量值 ...
- 兩種格式可以混合使用
[root@locadhost ~]# echo "$Producvt $Version" Benet 6.0 [root@locadhost ~]# export Product Version [root@locadhost ~]# bash [root@locadhost ~]# echo "$Product $Version" Benet 6.0
整數變量的運算
expr 變量1 運算符 變量2 [運算符 變量3]...
常用運算符
- 加法運算:
+
- 減法運算:
-
- 乘法運算:
\*
- 除法運算:
/
- 求模(取餘)運算:
%
特殊的Shell變量
環境變量
- 由系統提前創建,用來設置用戶的工作環境
- 配置文件:
/etc/profile
、~/.bash_ profile
常見的環境變量
- PWD、PATH
- USER、SHELL、 HOME
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin
[root@localhost ~]# PATH="$PATH:/root"
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin:/root
位置變量
- 表示爲$n, n爲1~9之間的數字
[root@localhost ~]# ./myprog.sh one two three four five six //$1,第1個位置參數,$2,第2個位置參數
+代表後面有格式要求
預定義變量
- $#;命令行中位置變量的個數
- $*:所有位置變量的內容
- $?:. 上一條命令執行後返回的狀態,當返回狀態值爲0時表示執行正常,非0值表示執行異常或出錯
- $0:當前執行的進程/程序名
[root@localhost ~]# vim mybak.sh
#!/bin/bash
TARFILE=beifen-'date +%s .tgz
tar zcf $TARFILE $* &> /dev/null
echo "已執行$0腳本,“
echo“共完成$#個對象的備份”
echo”具體內容包括: $*”
[root@localhost ~]# chmod +x mybak.sh
[root@localhost ~]# ./mybak.sh /etc/passwd /etc/shadow
已執行./mybak.sh腳本,
共完成2個對象的備份
具體包括:/etc/passwd /etc/shadow