簡介
寫個博客系統(tǒng)記錄自己學(xué)習(xí)Bash Shell編程的過程亲怠。使用環(huán)境為Ubuntu 16.04.5 Gnome主胧,使用bash的版本為4.3.48。
如果你想在虛擬機上安裝相同的linux系統(tǒng)可以參考之前的文章寫給萌新的教程:win10下使用VMware安裝Ubuntu16.04.5 Gnome。
在學(xué)習(xí)shell編程之前,我們需要了解一些相關(guān)的概念治拿。我們?nèi)粘K褂玫挠嬎銠C是有很多硬件組合在一起的復(fù)雜的系統(tǒng),這些硬件如CPU、內(nèi)存贯城、顯卡鲫骗、聲卡、鍵盤、鼠標(biāo)、顯示器等提供基本的計算資源纪岁。對于用戶而言西壮,直接使用這些硬件資源是繁瑣而又復(fù)雜的,因而有了各種各樣的應(yīng)用程序幫助用戶更好地使用計算機硬件。當(dāng)使用計算機硬件時康震,這些應(yīng)用程序會發(fā)生資源申請沖突绘梦,因而需要一個特殊的應(yīng)用程序管理分配硬件資源的申請和使用。這個特殊的"應(yīng)用程序"就是操作系統(tǒng)凝颇,操作系統(tǒng)一直運行在計算機上(通常稱為內(nèi)核,kernel)。操作系統(tǒng)的內(nèi)核并不直接為我們提供各種問題的解決方案弛随,它提供了大量的服務(wù)供應(yīng)用程序使用以便更好地利用計算機硬件資源决左。
那么shell又是什么呢惑芭?shell字面意思是外殼婴渡,剛好與操作系統(tǒng)的內(nèi)核相對應(yīng),它為用戶提供了一個訪問操作系統(tǒng)服務(wù)的接口堂鲤。在unix/linux中shell既是一個命令解釋器也是一門編程語言半哟。作為一個命令行解釋器,shell提供了一個用戶接口使用各種各樣的實用程序工具(比如coreutils、binutils等),而且shell允許我們將這些程序組合起來使用。現(xiàn)在所使用的shell有很多種某抓,比如sh、csh痹届、ksh队腐、dash为严、bash夕吻、fish涉馅、zsh等。在最初的unix系統(tǒng)中使用的shell是sh,并且有一個sh的標(biāo)準(zhǔn)。bash是GNU/Linux系統(tǒng)中默認的shell习霹, 它完全兼容sh阎曹,這意味著最新sh語法所寫的shell腳本可以不加修改地直接使用bash執(zhí)行处嫌。此外注暗,bash吸收借鑒了csh和ksh中的一些特性屡立,比如作業(yè)控制焚刺、命令行歷史等。
注:之后的shell指的基本上都是bash恬砂,特殊情況會另外說明咧纠。
shell分為兩種運行模式:交互式shell和非交互式shell。交互式shell就是在終端上執(zhí)行泻骤,shell接受從鍵盤的輸入并執(zhí)行漆羔。非交互式shell是指shell執(zhí)行文件中的命令。
shell也提供了一些內(nèi)置的命令(稱為builtins)實現(xiàn)了一些功能狱掂,比如cd,break,continue,exec等钧椰。
如何查看shell提供的內(nèi)置命令呢?可以在終端下執(zhí)行compgen -b符欠。
結(jié)果如下:
compgen -b
# 輸出結(jié)果如下
.
:
[
alias
bg
bind
break
builtin
caller
cd
command
compgen
complete
compopt
continue
declare
dirs
disown
echo
enable
eval
exec
exit
export
false
fc
fg
getopts
hash
help
history
jobs
kill
let
local
logout
mapfile
popd
printf
pushd
pwd
read
readarray
readonly
return
set
shift
shopt
source
suspend
test
times
trap
true
type
typeset
ulimit
umask
unalias
unset
wait
與任何高級語言一樣,shell提供變量瓶埋,流控制結(jié)構(gòu)希柿,引用和函數(shù)。Shell提供了專門用于交互式使用的功能养筒,而不是增強編程語言曾撤。這些交互式的功能包括作業(yè)控制,命令行編輯晕粪,命令歷史和別名挤悉。
shell的第一個程序
交互式
打開終端輸入echo "Hello world"
腳本文件
創(chuàng)建一個文件命名為hello.sh
內(nèi)容如下:
#!/bin/bash
echo "Hello,world"
如果要直接執(zhí)行,需要為其添加可執(zhí)行權(quán)限chmod +x ./hello.sh
或者用bash解釋運行巫湘,bash ./hello.sh