1. 程式人生 > >linux —— shell 程式設計(整體框架與基礎筆記)

linux —— shell 程式設計(整體框架與基礎筆記)

導讀

關於shell程式設計基礎的學習,網上有很多資源,如果在校圖書館應該也有一些教程,所以這裡對於零碎的基礎不做詳細記錄,而只是對一些常用的概念、命令與操作做一個簡要的記錄,以備方便查詢。

(本文所有語句的測試均在 Ubuntu 16.04 LTS 上進行)

1、終端、shell 和 bash

詳細的區別與聯絡:點這裡

一個最簡單的 “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程式設計流程控制4while迴圈和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