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