目錄
一.Shell腳本編程概述
1.基本概念
2.作用
3.Linux系統(tǒng)中常見的Shell腳本種類
4.應用場景
5.問題補充
5.1 為什么系統(tǒng)上合法的Shel1要寫入/etc/she1ls這個文件?
5.2 用戶什么時候可以取得shell來工作?用戶默認會取得哪一個shell?
二.Shell腳本的構成規(guī)范
三.?Shell腳本的執(zhí)行
1.腳本執(zhí)行邏輯
2.Shell腳本的執(zhí)行方法
3.腳本錯誤調試
四.重定向與管道符
1.交互式硬件設備標準輸出輸入
2.重定向具體操作
? ? ? ? ?3.管道符
3.1 使用管道符修改密碼
3.2?查看文件內容
五.echo命令:打印輸出內容
一.Shell腳本編程概述
1.基本概念
-
將要執(zhí)行的命令按順序保存到一個文本文件;
-
給該文件可執(zhí)行權限;
-
可結合各種Shell控制語句以完成更復雜的操作。
2.作用
Linux 系統(tǒng)中的 Shell 是一個特殊的應用程序,它介于操作系統(tǒng)內核與用戶之間,充當 了一個“命令解釋器”的角色,負責接收用戶輸入的操作指令(命令)并進行解釋,將需要執(zhí) 行的操作傳遞給內核執(zhí)行,并輸出執(zhí)行結果。 常見的 Shell 解釋器程序有很多種,使用不同的 Shell 時,其內部指令、命令行提示符 等方面會存在一些區(qū)別。
3.Linux系統(tǒng)中常見的Shell腳本種類
通過/etc/shells 文件可以了解當前Linux系統(tǒng)所支持的 Shell 腳本種類。
- bash:基于gun的框架下發(fā)展的shell(/bin/bash)是目前大多數(shù)Linux 版本采用的默認shell
- csh:類似c語言的shell
- tcsh:整合了csh提供了更多功能
- sh:已經被bash替換
- nologin:讓用戶無法登錄
注: bash ( /bin/bash) 是目前大多數(shù)Linux版本采用的默認Shell。
4.應用場景
- 重復性操作
- 交互性任務
- 批量事務處理
- 服務運行狀態(tài)監(jiān)控
- 定時任務執(zhí)行
5.問題補充
5.1 為什么系統(tǒng)上合法的Shel1要寫入/etc/she1ls這個文件?
? ? 因為系統(tǒng)某些服務運行過程中,會去檢查用戶能夠使用的Shell,而這些shell的查詢就是借由/etc/shells這個文件。
5.2 用戶什么時候可以取得shell來工作?用戶默認會取得哪一個shell?
? ? ?當用戶登錄的時候,系統(tǒng)就會給我一個shell讓我來用,而這個登錄取得的Shell就記錄在/etc/passwd這個文件內
二.Shell腳本的構成規(guī)范
編寫腳本代碼
- 使用vi或者vim編輯器,一般都是使用vim編輯器
- 每行一條Linux命令,按執(zhí)行順序一次編寫
vim 1.sh #使用vim編輯器編寫shell腳本
#!/bin/bash #腳本解釋器聲明
#輸出hello zhuzi #注釋
echo "hello zhuzi" #linux命令
- 腳本申明(解釋器):第一行開頭“#!/bin/bash”,表示此行以下的代碼語句是通過/bin/bash程序來解釋執(zhí)行。#!/bin/bash為默認的解釋器,其他類型的解釋器如#!/bin/python? #!/bin/expect
- 注釋信息:以#開頭的語句表示為注釋信息
- 可執(zhí)行語句:比如echo命令用于輸出"? "之間的字符串
三.?Shell腳本的執(zhí)行
1.腳本執(zhí)行邏輯
- 順序執(zhí)行:程序按從上到下順序執(zhí)行
- 選擇執(zhí)行:程序執(zhí)行過程中,根據條件的不同,進行選擇不同分支繼續(xù)執(zhí)行
- 循環(huán)執(zhí)行:程序執(zhí)行過程中需要重復執(zhí)行多次某段語句
2.Shell腳本的執(zhí)行方法
#法一:指定路徑的命令,要求文件必須有x權限
[root@localhost ~]#chmod +x /root/first.sh
[root@localhost ~]#cd /root/
[root@localhost ~]#./first.sh
當前目錄位于:
/root
#法二:指定Shell來解釋腳本,不要求文件必須有x權限。
[root@localhost ~]#bash first.sh
當前目錄位于:
/root
#法三:source 與 . 腳本路徑執(zhí)行shell腳本
[root@localhost ~]#source first.sh
當前目錄位于:
/root
#法四:將腳本文件放入$PATH中目錄的其中一個目錄,直接輸入腳本名
echo $PATH
/usr/local/sbin:/usr/local/bin :/usr/sbin :/usr/bin: / rpot/bin
#法五:自己創(chuàng)建一個路徑(將腳本文件所在的絕對路徑添加至PATH中)
在/etc/profile文件最后添加:export PATH=$PATH:腳本所在的絕對路徑
直接輸入腳本名執(zhí)行腳本
2.1?方法一:指定路徑的命令,要求文件必須有 x(可執(zhí)行)權限
chmod +x /root/1.sh #給腳本添加可執(zhí)行權限
指定絕對路徑: /root/1.sh
指定相對路徑: ./1.sh
2.2?方法二:指定shell來解釋腳本,不要求文件必須有 x (可執(zhí)行)權限
bash(sh)執(zhí)行腳本, 系統(tǒng)會創(chuàng)建一個子shell環(huán)境,并在這個子shell環(huán)境中執(zhí)行這個腳本 ,腳本執(zhí)行結束后系統(tǒng)就會自動退出bash環(huán)境
2.3 方法三:?source 與 . 腳本路徑執(zhí)行shell腳本(不建議使用)
?不建議使用source 與 . 執(zhí)行腳本會在當前 shell 環(huán)境中執(zhí)行腳本 影響當前環(huán)境
2.4 方法四:?將腳本文件放入$PATH中目錄的其中一個目錄,直接輸入腳本名執(zhí)行
echo $PATH
/usr/local/sbin:/usr/local/bin :/usr/sbin :/usr/bin: / rpot/bin
以下兩個目錄一般放自己創(chuàng)建或第三方應用程序生成的命令文件
- /usr/local/sbin:只有管理員能執(zhí)行的命令
- /usr/local/bin :所有用戶能夠執(zhí)行的命令
以下兩個目錄一般放系統(tǒng)自帶或者系統(tǒng)生成的命令文件
- /usr/sbin :只有管理員能執(zhí)行的命令
- /usr/bin: 所有用戶能夠執(zhí)行的命令
/ root/bin:不存在
將當前文件做個軟連接放入或者使用cp復制到 /usr/local/bin目錄下
直接輸入腳本名執(zhí)行腳本
- 使用cp命令
2.5 方法五:自己創(chuàng)建一個路徑(將腳本文件所在的絕對路徑添加至PATH中)
在/etc/profile文件最后添加:export PATH=$PATH:腳本所在的絕對路徑
直接輸入腳本名執(zhí)行腳本
[root@Zhuzi ~]#vim /etc/profile
export PATH=$PATH:/root/shell
#export使環(huán)境變量的值全局環(huán)境下生效,不加export默認在當前環(huán)境變量下生效
[root@Zhuzi ~]#source /etc/profile #刷新配置文件
[root@Zhuzi ~]# echo $PATH #查看當前路徑
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/shell
[root@Zhuzi ~]# chmod +x 1.sh #給腳本加上執(zhí)行權限
[root@Zhuzi ~]#1.sh #輸入腳本名 直接執(zhí)行
hello zhuzi
3.腳本錯誤調試
腳本錯誤種類
- 命令錯誤:命令出錯不會影響接下來的命令繼續(xù)
- 語法錯誤:會影響接下來的命令繼續(xù)
- 邏輯錯誤:只能自己去篩查代碼的正確
檢查腳本錯誤
- 檢查語法錯誤:bash -n 腳本名稱 (不在當前目錄下加絕對路徑) ? ?
- 檢查邏輯錯誤:bash -x 腳本名稱 (不在當前目錄下加絕對路徑) ? ?
總結:腳本錯誤常見的有三種區(qū)別
- 語法錯誤,會導致后續(xù)的命令不繼續(xù)執(zhí)行,可以用bash -n 檢查錯誤,提示的出錯行數(shù)不一定是準確的
- 命令錯誤,默認后續(xù)的命令還會繼續(xù)執(zhí)行,用bash -n 無法檢查出來 ,可以使用 bash -x 進行觀察
- 邏輯錯誤:只能使用 bash -x 進行
四.重定向與管道符
由于Shell腳本“批量處理”的特殊性,其大部分操作過程位于后臺,不需要用戶進行干預,因此要學會提取、過濾執(zhí)行信息變得十分重要,所以我們需要重定向和管道。
1.交互式硬件設備標準輸出輸入
類型 | 設備文件 | 文件描述編號 | 默認設備 |
---|---|---|---|
標準輸入 | /dev/stdin | 0 | 鍵盤 |
標準輸出 | /dev/stdout | 1 | 顯示器 |
標準錯誤輸出 | /dev/stderr | 2 | 顯示器 |
-
標準輸入:從該設備接收用戶輸入的數(shù)據
-
標準輸出:通過該設備向用戶輸出數(shù)據
-
標準錯誤:通過該設備報告執(zhí)行出錯信息
2.重定向具體操作
重定向就是:不通過標準輸出到屏幕上,輸出到你指定的位置
類型 | 操作符 | 用途 |
---|---|---|
重定向輸入 | < | 從指定的文件讀取數(shù)據,而不是從鍵盤輸入 |
重定向輸出 | > | 將輸出結果保存到指定的文件(覆蓋原有內容) |
重定向輸出 | >> | 將輸出結果換行添加在文件尾部 |
重定向錯誤輸出 | 2> | 將錯誤信息保存到指定的文件(覆蓋原有內容) |
重定向錯誤輸出 | 2>> | 將錯誤信息追加到指定的文件中 |
混合輸出 | &> | 將標準輸出、標準錯誤的內容保存到同一個文件中 |
示例1:重定向輸入與輸出修改密碼
示例2:覆蓋追加
#將12345678輸入到文件log.txt中
[root@Zhuzi ~]#echo "12345678" > log.txt
[root@Zhuzi ~]#cat log.txt
12345678
[root@Zhuzi ~]#
#再將112234寫入log.txt中,這個時候會覆蓋原來的數(shù)據
[root@Zhuzi ~]#echo "112234" > log.txt
[root@Zhuzit ~]#cat log.txt
112234
[root@Zhuzi ~]#
#繼續(xù)將112234寫入log.txt中,使用>>,這個時候會追加原來的數(shù)據
[root@Zhuzi ~]#echo "112234" >> log.txt
[root@Zhuzit ~]#cat log.txt
112234
112234
示例3:混合輸出
3.管道符
管道符號 “|”
將左側的命令輸出結果,作為右側命令的處理對象
3.1 使用管道符修改密碼
3.2?查看文件內容
五.echo命令:打印輸出內容
選項 | 作用 |
-n | 不追加換行 |
-e | \b?? ?退格 |
\c?? ?抑制更多的輸出 | |
\n?? ?換行 | |
\t?? ?橫向制表符文章來源:http://www.zghlxwxcb.cn/news/detail-450308.html | |
\v?? ?縱向制表符 |
- echo -n
文章來源地址http://www.zghlxwxcb.cn/news/detail-450308.html
- echo -e \b?? ? ? ? ?
- echo -e \c? ? ? ? ??
- echo -e \n? ? ? ? ??
- echo -e \t? ? ? ? ? ?
- ?echo -e \v?? ? ? ??
到了這里,關于Shell腳本——編程規(guī)范與echo命令的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!