Bash編程入門-1:Shell與Bash

前言:之前寫過一篇介紹Linux系統(tǒng)基本技能的文章,文章的最后放了一張基本操作的思維導圖,把這張圖掌握了,就能像使用wins系統(tǒng)一樣使用linux系統(tǒng)了。

青山屋主:生信自學之linux操作基礎?zhuanlan.zhihu.com

這之后需要學什么呢?需要繼續(xù)學習寫shell腳本,用腳本來處理數(shù)量龐大的且重復性高的工作。本系列就從shell和bash的介紹開始,教大家如何用把shell命令寫成可以重復使用的腳本。

說明:本文是對Vamei知乎文章Vamei:快速學習Bash一文的學習筆記,根據(jù)個人理解調整了內容順序,補充了一些注釋和說明等內容。

1. shell和bash

shell是運行在終端中的文本互動程序,bash(GNU Bourne-Again Shell)是最常用的一種shell。是當前大多數(shù)Linux發(fā)行版的默認Shell。

Shell相當于是一個翻譯,把我們在計算機上的操作或我們的命令,翻譯為計算機可識別的二進制命令,傳遞給內核,以便調用計算機硬件執(zhí)行相關的操作;同時,計算機執(zhí)行完命令后,再通過Shell翻譯成自然語言,呈現(xiàn)在我們面前。

其他的shell還有:sh、bash、ksh、rsh、csh等。Ubuntu系統(tǒng)常用的是bash,Bio-linux系統(tǒng)是基于ubuntu定制的,但是卻使用了zsh。

sh的全名是Bourne Shell。名字中的玻恩就是這個Shell的作者。

而bash的全名是Bourne Again Shell。最開始在Unix系統(tǒng)中流行的是sh,而bash作為sh的改進版本,提供了更加豐富的功能。一般來說,都推薦使用bash作為默認的Shell。

如何查看當前系統(tǒng)中shell的類型?

echo $SHELL

2. shell命令

shell命令可以分為以下三類:

內建函數(shù)(built-in function):shell自帶的功能

可執(zhí)行文件(executable file):保存在shell之外的腳本,提供了額外的功能。

別名(alias):給某個命令的簡稱

shell的內建函數(shù)是自帶的預先寫好的,實現(xiàn)一定功能的程序。

可執(zhí)行文件是shell之外的腳本,提供了使用者自定義的功能。Shell必須在系統(tǒng)中找到對應命令名的可執(zhí)行文件,才能正確執(zhí)行。我們可以用絕對路徑來告訴Shell可執(zhí)行文件所在的位置。如果用戶只是給出了命令名,而沒有給出準確的位置,那么Shell必須自行搜索一些特殊的位置,也就是所謂的默認路徑。Shell會執(zhí)行第一個名字和命令名相同的可執(zhí)行文件。我們可以通過which命令,來確定命令名對應的是哪個可執(zhí)行文件:

which datewhich pwd? #以上兩個命令分別返回date和pwd命令對應的可執(zhí)行文件的絕對路徑

別名是給某個命令一個簡稱,以后在Shell中就可以通過這個簡稱來調用對應的命令。在Shell中,我們可以用alias來定義別名:

alias freak=“free -h”

可以用alias將一些常用的命令進行簡化,比如“l(fā)s -l”簡化為“l(fā)l”

如何了解命令的類型?

type datetype pwd#可以用type命令查看命令類型。如果是內建函數(shù)會返回builtin字樣,如果是可執(zhí)行文件,將返回文件的路徑

3. 命令的選項和參數(shù)

我們已經(jīng)看到,一行命令里還可以包含著選項參數(shù)??偟膩碚f,選項用于控制命令的行為,而參數(shù)說明了命令的作用對象。

比如說uname命令,該命令的主要功能是輸出系統(tǒng)信息。它有很多個選項,不同的選項指定輸出不同想系統(tǒng)信息。

uname --help

Usage:uname [OPTION]...

print certain system information. with no OPTION, same as -s.

-a,--all? ? ? ? ? ? ? print all informationin the follow order,except omit -p and -i if unknown

-s,--kernel-name? ? ? print the kernel name

-n,--nodename? ? ? ? ? print the network node hostname

-r,--kernel-release? ? print the kernel release

-v,--kernel-version? ? print the kernel version

-m,--machine? ? ? ? ? print the machin hardware name

-p,--processor? ? ? ? print the processor type or "unknown"

-i,--hardware-platform print the hardware platform or "unknown"

-o,--operating-system? print the operating system

--help? ? ? ? ? ? ? display this help and exit

--version? ? ? ? ? output version information and exit

....

上面例子中短橫引領的字母叫短選項,雙短橫引領的單詞叫長選項,對應的短選項等價于長選項。比如“uname -s”等價于“uname --kenel-name”。

多個短選項的字母可以合在一起,跟在同一個"-"后面。比如,下面的兩個命令就等價:

uname -m -r uname -mr

一個命令可能有非常多的選項,要弄清楚它們的用法還需要閱讀相應的幫助文檔。一般情況下是該命令后加“-h”選項,或者是加"--help"選項。

參數(shù)說明了命令的作用對象。就拿echo這個命令來說,它能把字符打印到終端。它選擇打印的對象,正是它的參數(shù):

echo hello

有的時候,選項也會攜帶變量,以便來說明選項行為的原材料。比如:

sudo date --set="1999-01-01 08:00:00"

date是參數(shù),選項"--set"用于設置時間,用等號連接的,就是它的參數(shù)。date會把日期設置成這一變量所代表的日期。如果用短選項,那么就要用空格取代等號了:

sudo date -s "1999-01-01 08:00:00"

值得注意的是,Shell對空格敏感當一整個參數(shù)信息中包含了空格時,我們需要用引號把參數(shù)包裹起來,以便Shell能識別出這是一個整體。

更多內容請移步青山屋主的知乎專欄:https://zhuanlan.zhihu.com/c_67761129

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容