《Linux命令列與shell指令碼程式設計大全》第五章理解shell
5.1
1. cat /etc/passwd
可以檢視每個使用者自己的預設的shell程式。
2.預設的互動shell會在使用者登入某個虛擬控制檯終端時啟動。
不過還有另外一個預設的shell是/bin/sh,它作為預設的shell,用於那些需要在啟動時使用的shell指令碼
ls -l /bin/sh 進行檢視
烏班圖的發行版中預設的系統shell(dash shell)和預設的互動shell(bash shell)並不相同。
可以直接 dash 來啟動 dash shell
exit 退出
5.2 shell 的父子關係
一個shell可以建立另外一個shell(子shell)。
ps -f 檢視一下。
bash shell就是一個程式(執行的程式)。
輸入bash就會建立一個子shell。exit退出。 ps- f –forest。可以展示程式間的巢狀結構。
5.2.1 程式列表
$ pwd; ls; pwd; cd /; echo $BASH_SUBSHELL
這樣可以讓命令依次執行。這是在當前shell中執行的。
$(pwd; ls; echo $BASH_SUBSHELL;) // 這個是在子shell中執行。
() 還可以巢狀,比如pwd;(pwd; (ls; cd /home))
echo $BASH_SUBSHELL 若返回0,表示沒有子shell。
$sleep 300& // 後臺執行命令,& 就是把命令置入後臺模式
jobs 可以檢視後臺作業資訊
還可以這樣,將程式列表置入後臺。
$(sleep 2; echo $BASH_SUBSHELL; sleep 2;)&
協程:可以同時做兩件事,它在後臺生成一個子shell,並在這個子shell中執行命令。
使用coproc命令進行協程處理:
$ coproc sleep 10
還可以這樣:
$coproc MyJob { sleep 10; } // 相當於給sleep 10取了個名字。注意那幾個空格
5.3 理解shell的內建命令
1.外部命令:又稱檔案系統命令,存在與bash shell之外的命令。並不是shell程式的一部分
通常位於 /bin /usr/bin /sbin /usr/sbin中。
外部 命令執行時會建立一個子程式。這種操作叫 衍生(forking)。
比如ps是一個外部命令,可以使用which 和 type命令找到它
$which ps
$ type -a ps
$ ls -l /bin/ps
2. 內建命令:不需要子程式來執行,和shell是一體的,不需要藉助外部程式檔案來執行。
(1)比如 exit 和 cd是內建命令
$type exit
$type cd
有些命令有多種實現,比如pwd和echo既有外部命令也有內建命令
#type -a echo
which 只顯示出外部命令檔案。
type -a 顯示出每個命令的兩種實現。
竅門:對於多種實現的命令,預設執行是內建的,若想要執行外部命令可以指定對應的檔案就好了。
比如
$pwd // 執行的是內部命令
$/bin/pwd // 執行的外部命令
(2)檢視歷史執行的命令
$ history // 這個是內建命令
可以看到之前執行的命令,前面有個數字,代表命令編號。比如是38
$ !38 // 表示執行第38條命令
(3)$ !! 這個是執行上一條輸入的命令。
(4)命令別名
alias 也是內建命令
$alias -p // 檢視當前可用的別名
建立自己的命令
$alias xcyls=`ls -al`
一個別名僅僅在它所被定義的shell程式中才有效。在 ~/.bashrc下修改可以對所有shell都有效
shell 子shell 程式 子程式 都會受到環境變數的影響。
相關文章
- 《Linux命令列與shell指令碼程式設計大全 第3版》Linux命令列---46Linux命令列指令碼程式設計
- Linux命令列與shell指令碼程式設計入門經驗Linux命令列指令碼程式設計
- Linux命令列與shell指令碼程式設計大全(第三版)之錯別字Linux命令列指令碼程式設計
- [圖靈贈書]《Linux命令列與shell指令碼程式設計大全(第2版)》點評贈書圖靈Linux命令列指令碼程式設計
- Linux Shell程式設計(3)——執行shell指令碼Linux程式設計指令碼
- 《linux命令列與shell指令碼程式設計大全》第三版 - 核心筆記(3/4):sed和gawkLinux命令列指令碼程式設計筆記
- 【學習】Linux Shell指令碼程式設計Linux指令碼程式設計
- 輕鬆使用“Explain Shell”指令碼來理解 Shell 命令AI指令碼
- Shell 指令碼程式設計陷阱指令碼程式設計
- Linux Shell指令碼程式設計-基礎1Linux指令碼程式設計
- shell指令碼(6)-shell陣列指令碼陣列
- Linux Bash Shell學習(七):shell程式設計基礎——執行Shell指令碼、functionLinux程式設計指令碼Function
- Linux shell程式設計(一)shell指令碼中的變數詳解Linux程式設計指令碼變數
- Shell程式設計-01-Shell指令碼初步入門程式設計指令碼
- shell指令碼程式設計筆記指令碼程式設計筆記
- 7.shell指令碼程式設計指令碼程式設計
- 初識shell指令碼程式設計指令碼程式設計
- shell指令碼程式設計基礎指令碼程式設計
- Linux Shell指令碼程式設計while語句案例Linux指令碼程式設計While
- shell高效程式設計:shell指令碼從未如此美麗程式設計指令碼
- shell指令碼的命令列引數 - todo指令碼命令列
- Shell指令碼程式設計規範與變數(shell指令碼必須要知道的規矩!)指令碼程式設計變數
- Shell指令碼程式設計初體驗指令碼程式設計
- BASH Shell的指令碼程式設計(轉)指令碼程式設計
- Linux系統程式設計(15)——shell指令碼語法Linux程式設計指令碼
- Linux命令和shell指令碼學習Linux指令碼
- linux Shell 命令列-03-array Shell 陣列Linux命令列陣列
- 兩道shell指令碼的程式設計題(sed與awk)指令碼程式設計
- Linux Shell程式設計(27)——子shellLinux程式設計
- Linux Shell程式設計(1)——shell程式設計簡介Linux程式設計
- 高階bash/shell指令碼程式設計指南指令碼程式設計
- 記錄shell指令碼程式設計相關指令碼程式設計
- Linux Shell程式設計(20)——基本命令Linux程式設計
- Linux Shell程式設計(21)——複雜命令Linux程式設計
- Linux Shell程式設計(24)——命令替換Linux程式設計
- Linux Shell指令碼Linux指令碼
- Linux shell 指令碼Linux指令碼
- LINUX Shell指令碼程式設計例項詳解(一)上Linux指令碼程式設計