當前位置:首頁 » 操作系統 » bashshell源碼

bashshell源碼

發布時間: 2023-08-14 20:33:36

1. linux中bash是什麼

linux中bash是什麼?我們一起來了解一下吧。
bash是指GNU項目編寫的中的Unixshell,也就是指的linux所用的shell,而Shell是指提供使用者使用界面的軟體,也就是一個命令行解釋器,BASH是SHELL中的一種,是大多數LINUX發行版默認的SHELL。

linux系統與windows系統的區別
區別1:開放性
所謂的開放性就是linux操作系統是開放源碼系統,可以對其程序進行編輯修改。而微軟的windows系統是手微軟版權保護,就是只能微軟內部進行開發及修改。
區別2:價格不同
linux系統是免費使用,而微軟開發的windows系統則是需要花費金錢去購買。
區別3:文件格式不同
windows操作系統內核是NT,而linux是shell;另外,windows硬碟文件格式是fat32或NTSF,而linux需要的文件格式是ext2或ext3,該操作系統還多一個SWAP格式的交換分區。
本文章基於ThinkpadE15品牌、centos7系統撰寫的。

2. Linux Shell 腳本編程最佳實踐

IT路邊社

前言

與其它的編碼規范一樣,這里所討論的不僅僅是編碼格式美不美觀的問題, 同時也討論一些約定及編碼標准。這份文檔主要側重於我們所普遍遵循的規則,對於那些不是明確強制要求的,我們盡量避免提供意見。

編碼規范對於程序員而言尤為重要,有以下幾個原因:

本文檔中的准則致力於最大限度達到以下原則:

盡管本文檔涵蓋了許多基礎知識,但應注意的是,沒有編碼規范可以為我們回答所有問題,開發人員始終需要再編寫完代碼後,對上述原則做出正確的判斷。

:未明確指明的則默認為必須(Mandatory)

主要參考如下文檔:

僅建議Shell用作相對簡單的實用工具或者包裝腳本。因此單個shell腳本內容不宜太過復雜。

在選擇何時使用shell腳本時時應遵循以下原則:

可執行文件不建議有擴展名,庫文件必須使用 .sh 作為擴展名,且應是不可執行的。

執行一個程序時,無需知道其編寫語言,且shell腳本並不要求具有擴展名,所以更傾向可執行文件沒有擴展名。

而庫文件知道其編寫語言十分重要,使用 .sh 作為特定語言後綴的擴展名,可以和其他語言編寫的庫文件加以區分。

文件名要求全部小寫, 可以包含下劃線 _ 或連字元 - , 建議可執行文件使用連字元,庫文件使用下劃線。

正例:

反例:

源文件編碼格式為UTF-8。避免不同操作系統對文件換行處理的方式不同,一律使用 LF 。

每行最多不超過120個字元。每行代碼最大長度限制的根本原因是過長的行會導致閱讀障礙,使得縮進失效。

除了以下兩種情況例外:

如出現長度必須超過120個字元的字元串,應盡量使用here document或者嵌入的換行符等合適的方法使其變短。

示例:

除了在行結束使用換行符,空格是源文件中唯一允許出現的空白字元。

對從來沒有用到的或者被注釋的方法、變數等要堅決從代碼中清理出去,避免過多垃圾造成干擾。

Bash 是唯一被允許使用的可執行腳本shell。

可執行文件必須以 #!/bin/bash 開始。請使用 set 來設置shell的選項,使得用 bash echo "Process $: Done making $$$."
# 示例7:命令參數及路徑不需要引號 grep -li Hugo /dev/ "$1"
# 示例8:常規變數用雙引號,ccs可能為空的特殊情況可不用引號 git send-email --to "${reviewers}" ${ccs:+"--cc" "${ccs}"}
# 示例9:正則用單引號,$1可能為空的特殊情況可不用引號 grep -cP '([Ss]pecial||?characters*) ${1:+"$1"}
# 示例10:位置參數傳遞推薦帶引號的"$@",所有參數作為單字元串傳遞用帶引號的"$*" # content of t.sh func_t { echo num: $# echo args: 1:$1 2:$2 3:$3 }
func_t "$@" func_t "$*" # 當執行 ./t.sh a b c 時輸出如下: num: 3 args: 1:a 2:b 3:c num: 1 args: 1:a b c 2: 3:

使用 $(command) 而不是反引號。

因反引號如果要嵌套則要求用反斜杠轉義內部的反引號。而 $(command) 形式的嵌套無需轉義,且可讀性更高。

正例:

反例:

條件測試

使用 [[ ... ]] ,而不是 [ , test , 和 /usr/bin/[ 。

因為在 [[ 和 ]] 之間不會出現路徑擴展或單詞切分,所以使用 [[ ... ]] 能夠減少犯錯。且 [[ ... ]] 支持正則表達式匹配,而 [ ... ] 不支持。參考以下示例:

盡可能使用變數引用,而非字元串過濾。

Bash可以很好的處理空字元串測試,請使用空/非空字元串測試方法,而不是過濾字元,讓代碼具有更高的可讀性。正例:

反例:

正例:

反例:

正例:

反例:

文件名擴展

當進行文件名的通配符擴展時,請指定明確的路徑。

當目錄中有特殊文件名如以 - 開頭的文件時,使用帶路徑的擴展通配符 ./* 比不帶路徑的 * 要安全很多。

應該避免使用eval。

Eval在用於分配變數時會修改輸入內容,但設置變數的同時並不能檢查這些變數是什麼。反例:

請使用進程替換或者for循環,而不是通過管道連接while循環。

這是因為在管道之後的while循環中,命令是在一個子shell中運行的,因此對變數的修改是不能傳遞給父shell的。

這種管道連接while循環中的隱式子shell使得bug定位非常困難。反例:

如果你確定輸入中不包含空格或者其他特殊符號(通常不是來自用戶輸入),則可以用for循環代替。例如:

使用進程替換可實現重定向輸出,但是請將命令放入顯式子 shell,而非 while 循環創建的隱式子 shell。例如:

總是檢查返回值,且提供有用的返回值。

對於非管道命令,使用 $? 或直接通過 if 語句來檢查以保持其簡潔。

例如:

當內建命令可以完成相同的任務時,在shell內建命令和調用外部命令之間,應盡量選擇內建命令。

因內建命令相比外部命令而言會產生更少的依賴,且多數情況調用內建命令比調用外部命令可以獲得更好的性能(通常外部命令會產生額外的進程開銷)。

正例:

反例:

載入外部庫文件不建議用使用.,建議使用source,已提升可閱讀性。正例:

反例:

除非必要情況,盡量使用單個命令及其參數組合來完成一項任務,而非多個命令加上管道的不必要組合。常見的不建議的用法例如:cat和grep連用過濾字元串; cat和wc連用統計行數; grep和wc連用統計行數等。

正例:

除特殊情況外,幾乎所有函數都不應該使用exit直接退出腳本,而應該使用return進行返回,以便後續邏輯中可以對錯誤進行處理。正例:

反例:

推薦以下工具幫助我們進行代碼的規范:

原文鏈接:http://itxx00.github.io/blog/2020/01/03/shell-standards/

獲取更多的面試題、腳本等運維資料點擊: 運維知識社區 獲取

腳本之---簡訊轟炸機

腳本之---QQ微信轟炸機

ansible---一鍵搭建redis5.0.5集群

elk7.9真集群docker部署文檔

全球最全loki部署及配置文檔

最強安全加固腳本2.0

一鍵設置iptbales腳本

3. 求Linux下命令的源代碼,

1.ash
(1)簡介
ash --a shell
這是由Kenneth Almquist在1989年編寫的,ash是Linux下的許多命令解釋器中的一個,它的許多特性接近於SYSTEM V的shell。
(2)部分參數說明
ash [ -efIijnsxz ] [ +efIijnsxz ] [ -c命令] [ 參數 ]
-c 命令:若用-c參數,則ash從標准輸入中讀入命令(在執行完-c帶的命令之後)。
-s:若用-s參數,則ash從標准輸入中讀入命令(在執行完-c帶的命令之後)。
如果不跟-c -s參數則ash以所跟的第一個參數為文件名,從此文件中讀入命令。如無參數則ash預設設定-s參數,從標准輸入中讀入命令,直到輸入exit。
如果參數0的第一個字母是"-"則ash確定為login shell,ash將從/etc/profile或用戶的根目錄中的.profile讀入相應的設置和環境變數。
-e:若用-e參數,則ash執行命令後返回值為非零值時則退出ash。
-f:若用-f參數,則ash關閉自動產生文件名功能。
-j:打開伯克利UNIX風格的工作控制。
-n:讀入命令但是並不執行。
(3)範例
ash -c ls
ash執行ls這個命令後退回原先的目錄和shell。
ash -s
ash執行一個新的shell,現在可以在這個shell中工作,按(Ctrl-D)或輸入exit後,則退回原先的目錄和shell,所設定的環境變數返回原先的值。
2.at
(1)簡介
at,batch,atq,atrm:安排、檢查、刪除隊列中的工作。
由Thomas Koenig編寫。
(2)部分參數說明
at [-V] [-q隊列] [-f文件名] [-mldbv] 時間
at -c 作業 [作業…]
atq [-V] [-q隊列] [-v]
atrm [-V] 作業 [作業…]
batch [-V] [-q隊列] [-f文件名] [-mv] [時間]
at在設定的時間執行作業。
atq列出用戶排在隊列中的作業,如果是超級用戶,則列出隊列中的所有工作。
atrm刪除隊列中的作業。
batch用低優先順序運行作業,只要系統的loadavg(系統平均負載)<1.5(或者在atrun中設定的值)它就開始執行作業。
-V:若用-V參數,則顯示版本號到標准錯誤輸出。
-q隊列:若用-q參數,則指定可選隊列名稱,隊列名稱可以是a到z或A到Z之間的任意字母。at的預設隊列名是c,batch的預設隊列名是E,隊列的字母順序越高,則隊列的優先順序越低。如果是大寫字母的話則提交給batch,如果atq使用-q參數,則只顯示這個隊列中的作業。
-m:執行完作業後即使此作業並沒有輸也給提交作業的用戶發送提示mail。
-f文件名:從文件中讀取作業。
-l:等於atq。
-d:等於atrm。
-b:等於batch。
時間:這是用戶設定的作業開始執行的時間。時間的格式分成三個部分:時間、日期、偏移量。可接受的時間形式是HHMM或HH:MM,在一天中指定的時間運行,如果時間過去了就在第二天執行。可以在時間後加入AM或PM使其在上午或下午運行,也可以指定在哪一天執行,給出日期的格式應為MMDDYY或MM/DD/YY或MM.DD.YY,也可以給出偏移量:
時間+計數時間間隔
時間間隔可以是minutes,hours,days,weeks。
也可以指定today讓作業在今天執行,指定tommorow讓作業在明天執行。
(3)注意事項
如果沒有指定-f選項,是at從標准輸入讀入所有的命令,所以可以通過管道、重定向或交互輸入來輸入命令。
超級用戶可以在任何情況下使用at系列的命令。一般用戶使用at系列命令的權利由文件/etc/at.allow,/etc/at.deny控制。如果/etc/at.allow存在,則只有列在這個文件中的用戶才能使用at系列的命令。如果/etc/at.allow文件不存在,則檢查/etc/at.deny這個文件。只要不列在這個文件中的用戶都可以使用at系列的命令。預設的配置是/etc/at.deny,是一個空文件,這表明所有的用戶都可以使用at系列的命令。
(4)範例
at -f work 4pm + 3 days
在三天後下午4點執行文件work中的作業。
at -f work 10am Jul 31
在七月31日上午10點執行文件work中的作業。
3.banner
banner:列印大標題。
banner在標准輸出上列印高質量的標題,如果沒有輸入要列印的文字,則其等待從標准輸入輸入一行文字。其標題由"*"組成。由Mark Horton編寫。
(2)部分參數說明
/usr/bin/banner [ -wn ]信息
-w寬度 輸出寬度從131到n,n預設為80列。
(3)注意事項
不能列印字元:< ,>,[,],\,^,_,{,},|,-。信息長度為10個英文字元,如果用空格分開字元串,還是連續列印字元串,兩個字元串可以被括在引號(")中。這命名banner把這些字任串置於同一行中。
4.bash
(1)簡介
bash:GNU Bourne-Again Shell
自由軟體基金會(Free Software Foundation Inc)擁有bash版權。
bash是Linux下的許多命令解釋器中的一個,同sh兼容,並且包含了ksh和csh中一些有用的特性。遵從IEEE Posix Shell and Tools specification(IEEE Working Group 1003.2)。

4. 三個簡單Linux的shell腳本程序編寫

shell腳本和windows平台上的bat批處理是一樣的,簡化用戶處理重復動作的操作,shell腳本由shell命令組成。
工具/原料
vim
ubuntu
方法/步驟
新建一個文件shell腳本一般用×.sh作為後綴當然勇氣他的也可以。打開終端輸入touch
first.sh
新建一個名為first的shell腳本。
編寫一個簡單的linuxshell腳本
使用vim
編輯first.sh也可以用其他的文本編輯器,推薦使用vim
使用命令
vim
first.sh打開,輸入i進入編輯模式。
編寫一個簡單的linuxshell腳本
我們寫入一個簡單的shell腳本,注意第一行的代碼解釋器的指定,這里使用的是/bin/bash/
解釋器
也可用其他的根據個人情況自己選擇。
腳本解釋:
echo
//顯示一串字元並自動換行
read
NAME
//從屏幕獲取一段字元,並賦予NAME
$NAME
//取NAME變數的值
#
//只用一個#表示注釋文本
編寫一個簡單的linuxshell腳本
文件寫完後按下esc鍵
退出插入模式,接著輸入:wq
保存文本並退出文本編輯。
編寫一個簡單的linuxshell腳本
輸入sh
+
腳本名稱
運行腳本,或給文件可運行許可權
chmod
+x
然後輸入./first.sh運行腳本。

熱點內容
公司郵箱收發件伺服器怎麼填 發布:2025-03-11 01:20:30 瀏覽:137
雲主機怎麼配置雲桌面 發布:2025-03-11 01:17:39 瀏覽:208
c語言tinyxml 發布:2025-03-11 01:12:39 瀏覽:823
資料庫inner 發布:2025-03-11 01:06:55 瀏覽:900
ice解壓 發布:2025-03-11 00:54:50 瀏覽:379
網址批量訪問 發布:2025-03-11 00:40:38 瀏覽:750
粉紅視頻腳本 發布:2025-03-11 00:39:56 瀏覽:446
伺服器名稱或ip從哪裡看 發布:2025-03-11 00:35:44 瀏覽:493
日本細菌戰資料庫 發布:2025-03-11 00:29:34 瀏覽:425
釣魚直播用什麼配置 發布:2025-03-11 00:28:39 瀏覽:417