linux —— shell 程式設計(整體框架與基礎筆記)
導讀 |
關於shell程式設計基礎的學習,網上有很多資源,如果在校圖書館應該也有一些教程,所以這裡對於零碎的基礎不做詳細記錄,而只是對一些常用的概念、命令與操作做一個簡要的記錄,以備方便查詢。 (本文所有語句的測試均在 Ubuntu 16.04 LTS 上進行) |
詳細的區別與聯絡:點這裡
一個最簡單的 “Hello world” 顯示 程式:
#! /bin/bash echo "Hello world"echo.sh
#!/bin/bash 的作用:說明是用哪一個shell 來解釋檔案,如果沒寫,預設使用 $SHELL 裡設定的shell
#! 可以用來指定不同的命令直譯器,比如我們指定 rm 程式, 以下是一個自刪除指令碼:
#!/bin/rm # 自刪除指令碼 # 當你執行這個指令碼時,基本上什麼都不會發生...... 當然這個檔案消失不見了 WHATEVER = 65 echo "This line will never print" exit $WHATEVER #指令碼不會執行上面這幾句#!/bin/rm 2、常用的基礎命令
echo:顯示一個字串
pwd:列印當前工作目錄
whereis: 檢視與程式相關的路徑
source: 在當前的環境下執行指定的指令碼檔案,其執行結果會影響當前環境,比如執行的指令碼 中cd執行會影響當前工作目錄
more 或 less : 以翻頁的方式檢視檔案,less 相比與 more 多了一些功能上的特性
cat: (連線檔案)將檔案輸出到標準輸出
head | tail: 輸出檔案的頭或尾的一部分
grep: 列印符合特定模式的行
> | : 重定向 和 管道
ls 顯示當前目錄下的檔案(ll 等)
read: 從標準中讀取一行
printf "Enter new password:" stty-echo read poss < /dev/tty printf "Enter again" read pass2 < /dev/tty ......例子:/dev/tty 讀取密碼
檔案和資料夾的基本操作:點這裡
3、Linux Shell 的變數 普通變數:例子:
1 vname="content" 2 echo "$vname" 3 echo '$vname'
變數賦值:= 的兩邊不能有任何空格
變數援引:line 2 顯示 “content” ;line 3 顯示 “$vname”
數值變數運算:
let "var += 4"環境變數:
var=$(($var + 4))
unset:從當前shell刪除變數或函式
export:修改當前程序的環境變數
env:顯示環境中的環境變數和對於的值
注意:env 和 set 函式不同。env函式顯示的是環境變數,而set顯示的是所有本地變數,包括使用者的環境變數。
環境變數相關檔案的設定:點這裡
shell 指令碼語法:(條件、迴圈等) 點這裡
4、程式設計語法 與 文字處理由於這兩部分內容相對較多,為避免文章篇幅過大,這兩部分分別在具體的文章裡記錄。
程式設計語法:點這裡
文字處理:點這裡
5、正則表示式 概要正則表示式在UNIX/Linux 系統中有廣泛的結合與應用,用來強化工具本身的功能。常見的 UNIX 下支援正則表示式的工具有:
- 用於匹配文字行的 grep 工具族
- 用於改變輸入流的 sed 流編輯工具(steam editor)
- 用於處理字串的語言,如 awk 、python 、perl 、Tcl 等語言
- 檔案檢視程式,或分頁程式,如more ,page,less
- 文字編輯器,如 ed,vi, emacs,vim 等
gerp 族有曾有三種版本:
grep 最早的文字匹配程式。使用 POSIX 支援的基本正則表示式 (Basic Regular Expression, BRE)
egrep 拓展的grep 。使用拓展正則表示式 (Extended Regular Expression,ERE)
fgrep 快速grep (fast/fixed grep)。這個版本用於匹配固定字串而不是正則表示式
1992 年 POSIX標準 將其合而為一,只推薦使用grep,其他用引數來支援。
基礎正則表示式中有兩種基本字元匹配,特殊字元(meta Character , 元字元)和一般字元。
POSIX BRE 和 ERE 都支援的meta字元:
^ 錨定行或字串的開始。BRE僅在正則表示式的結尾處有意義,ERE在正表示式的任何地方都
有特殊意義(.*^word 在ERE有效,但是意義?)
$ 錨定行或字串的結尾。在BRE 與 ERE的區別同上
. 匹配一個非換行符的字元。
* 匹配先前字元任意多個,包括0
[...] 方括號表示式(Bracket Expression ),匹配方括號裡任意一個字元 [^A-FH-Z] 表示匹
配大寫字母G和其他除大寫字母外的字元/
\ 用於開啟或關閉後續字元的特殊含義。如 \(\)
POSIX BRE 和ERE 支援不同的meta字元
僅 BRE:
\(\) \(\)兩個符號之間的模式被儲存在保留空間(Holding Space),在後續通過轉義引用,最多儲
存9個。\(a\).*\1 表示2個a中間有任意字元的串。
\n 與上面的\(\)結合使用,n為1~9
x\{m,n\} x表示模式,表示x出現m~n次,x\{n\} 表示出現n次,x\{m,\} 表示出現至少m次
僅 ERE:
x{m,n} 同上一條
+ 相比* , 不包括0
? 匹配0個或1個
| 匹配前面 “或” 後面的正則表示式
() 匹配使用括號括起來的正則表示式群,如 (a.*a)|(b.*b) 表示匹配2個a中間有任意字元的串 或 2個b的情況。
GNU 版本 的grep 支援額外的 meta字元:
\< 錨定單詞的開始(不僅僅是行的開始)
\> 錨定單詞的結束
\w 匹配文字和數字字元,等價於 [A-Za-z0-9]
\W \w 的反義
\b 鎖定單詞,如“\bgrep\b”只匹配前後有空格或行開始與行結束的串
為了在不同國家的字元編碼中保持一致,POSIX (The Portable Operating System Interface)增加了特殊的字元類:
[:alnum:] A-Za-z0-9
[:alpha:] 文字字元
[:blank:] space 和 tab
[:digit:] 數字
[:graph:] 非空字元(非空格、控制字元)
[:lower:] 小寫字元
[:cntrl:] 控制字元
[:print:] 可列印字元,非空字元(包括空格)
[:punct:] 標點符號
[:space:] space 和tab 和 換行符
[:upper:] 大寫字元
[:xdigit:] 十六進位制數 (0-9,a-f ,A-F)
這樣就可以使用[:alpha:]匹配中文了;上面字元使用的時候必須置於[] 中才能成為正則表示式。
比如匹配數字字母下劃線: grep -E "[[:digit:][:alpha:]_]+"
6、程序相關ps: 顯示當前程序的快照 (常用引數 aux 或 -elf )
pstree: 列印程序結構
top : 顯示系統的程序
後臺方式啟動程式:command &
jobs: 檢視當前會話的作業狀態 (-l 參附加地顯示任務的程序號)
Ctrl-Z: 可以使前臺任務掛起暫停執行
bg: (將當前作業帶入後臺) 對於後臺掛起暫停的程序,轉到後臺繼續執行; 使用 %jobID 引數可以指定具體的程序
fg: 將後臺程序 (由+號指定) 置於前臺
stty tostop : 如果後臺具有終端輸出。該命令強制停止該作業
kill -l : 列出所有程序排程訊號
nice: 以指定的優先順序啟動一個程式
crontab 和 at :排程例程或單個(一次)系統任務。
產生訊號的方式:
1) 終端按鍵:Ctrl+C: SIGINT Ctrl+Z:SIGSTOP Ctrl+\:SIGQUIT
2) 通過系統呼叫:kill -SIGTERM 45624 | kill -9 4546
3) 通過函式(軟體):kill(SIGTERM,456465);
相關推薦
linux —— shell 程式設計(整體框架與基礎筆記)
導讀 關於shell程式設計基礎的學習,網上有很多資源,如果在校圖書館應該也有一些教程,所以這裡對於零碎的基礎不做詳細記錄,而只是對一些常用的概念、命令與操作做一個簡要的記錄,以備方便查詢。 (本文所有語句的測試均在 Ubuntu 16.04 LTS 上進行) 1
shell程式設計(條件判斷與流程控制)學習筆記
流程控制語句 一、條件判斷式 二、單分支if語句 三、雙分支if語句 四、多分支if語句 五、case語句 六、for迴圈 七、while迴圈和until迴圈 一 條件判斷式 1 按照檔案型別進行判斷 2 按照檔案許可權進行判斷 3 兩個檔案之間進行比較
Linux Shell程式設計(17)——巢狀迴圈
巢狀迴圈就是在一個迴圈中還有一個迴圈,內部迴圈在外部迴圈體中.在外部迴圈的每次執行過程中都會觸發內部迴圈,直到內部迴圈執行結束.外部迴圈執行了多少次,內部迴圈就完成多少次.當然,不論是外部迴圈或內部迴圈
Linux程式設計(Linux shell程式設計的例子:批量處理檔案)
各位看官們,咱們今天還是接著上一回的內容,列舉具體的例子給大家。閒話休說,言歸正轉。 各位看官們,在實際的工作中經常需要批量處理檔案,比如批量刪除檔案等。咱們今天就通過例子來說明 如何批量操作檔案
linux —— shell 程式設計(文字處理)
導讀 本文為博文 linux —— shell 程式設計(整體框架與基礎筆記)的第4小點的拓展。(本文所有語句的測試均在 Ubuntu 16.04 LTS 上進行) 1、基本文字處理 sort :用於排序,常用引數 -t 指定一行的分隔符 -k 指定具體排序的規則
Linux Shell程式設計(11)——退出和退出狀態
exit命令一般用於結束一個指令碼,就像C語言的exit一樣。它也能返回一個值給父程序。每一個命令都能返回一個退出狀態(有時也看做返回狀態).一個命令執行成功返回0,一個執行不成功的命令則返回一個非零值,此值通常可以被解釋成一個對應的錯誤值。除了一些例外的情況,一個行為端莊的
Linux Shell 程式設計(一)
從程式設計師的角度來看, Shell本身是一種用C語言編寫的程式,從使用者的角度來看,Shell是使用者與Linux作業系統溝通的橋樑。使用者既可以輸入命令執行,又可以利用 Shell指令碼程式設計,完成更加複雜的操作。在Linux GUI日益完善的今天,在系統管理等領域
Java語言程式設計(第十版基礎篇):printCalendar
注:預設從1800年1月1日星期三開始,要求使用者輸入年份和月份,自動生成對應的日曆。 對應的程式碼如下: package cn.edu.xyniu; import java.util.Scanner; public class PrintCal
linux學習筆記之shell程式設計(一)正則表示式與字元處理
shell程式設計 基礎正則表示式 正則和萬用字元的區別:正則是包含匹配,匹配檔案內容,grep,awk等支援正則表示式。萬用字元是完全匹配,匹配檔名,例如find,ls不認識正則表示式 ####正則表示式常用的字元(注意區別於萬用字元裡面的符號)#### -*
kali Linux shell程式設計基礎到進階
前幾天在群裡聽他們說不會shell程式設計就不算會linux,嘿,就我這暴脾氣,學!幹!嘿嘿!行了,不扯犢子了,犢子要生氣了,最近學習了shell,感觸頗多,我也參考了其他大佬的經驗,看著視訊課,學了些許基礎,其實也就是那回事,認認真真踏踏實實的學,是能學到東西的,還有,要是自學的話,一定要能坐
Linux Shell 程式設計基礎
什麼是shell? 在Linux核心與使用者之間的直譯器程式 — 通常指/bin/bash(預設直譯器) — 負責向核心翻譯及傳達使用者/程式指令 —相當於作業系統的“外殼” 互動式 ——命令列 — 人工干預、智慧化程度高;
Linux Shell程式設計基礎入門
shell指令碼通常以#!/bin/bash 起始 指令碼的執行方式有兩種。 將指令碼名作為命令列引數: bash myScript.sh 授予指令碼執行許可權,將其變為可執行檔案: chmod 755 myScript.sh ./myScript.sh
Linux shell程式設計基礎
一、linux常用命令 1.修改機器名稱(實質上是機器的域名,相當於www.baidu.com):vim /etc/hostname 2.關閉機器:shutdown -h now 或者 reboot -h now來直接重啟 3.檢視ip地址:ifco
linux學習筆記之shell程式設計(一)
shell程式設計 基礎正則表示式 正則和萬用字元的區別:正則是包含匹配,匹配檔案內容,grep,awk等支援正則表示式。萬用字元是完全匹配,匹配檔名,例如find,ls不認識正則表示式 ####正則
linux學習筆記之shell程式設計(三)流程控制(3)---for迴圈
for迴圈 語法格式1:指定迴圈範圍 for 變數 in value1 value2... do something done 指令碼例項1 #!/bin/bash for i in 1 2
linux學習筆記之shell程式設計(三)流程控制(4)while迴圈和until迴圈
while迴圈和until迴圈 ###、 while迴圈 不定迴圈,程式碼格式: while [判斷] do something done 指令碼例項1: #!/bin/bash #從1加到
linux系統程式設計(一)--時間與錯誤處理
#inlcude<error.h> errno perror(); //列印錯誤 strerror //列印錯誤 #inlcude<time.h> //使用CLOCKS_PER_SEC //常量可以得到秒數 clock_t \\ typedef
linux學習筆記之shell程式設計(二)條件判斷
條件判斷 檔案存在與否 -d 是否存在為目錄 -e 是否是檔案 -f 是否存在為檔案 [-d /root && echo "yes" || echo "no"] -檔案讀寫執行許可權#### -r 讀許可權 -w 寫
linux串列埠程式設計(控制流與終端)
流控制 資料在兩個串列埠之間傳輸時,常常會出現丟失資料的現象,或者兩臺計算機的處理速度不同,如桌上型電腦與微控制器之間的通訊,接收端資料緩衝區已滿,則此時繼續傳送來的資料就會丟失。流控制能解決這個問題,當接收端資料處理不過來時,就發出“不再接收”的訊號,傳送端就停止傳送,直到收到“可以繼續傳送”
linux shell 程式設計基礎筆記
1.變數 命名規則,只能以數字,字母,下劃線開始 命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭。 中間不能有空格,可以使用下劃線(_)。 不能使用標點符號。 不能使用bash裡的關鍵字(可用help命令檢視保留關鍵字) 舉例說明 RUNOOB LD_LI