《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指令碼程式設計-基礎1Linux指令碼程式設計
- Shell 指令碼程式設計陷阱指令碼程式設計
- Linux shell程式設計(一)shell指令碼中的變數詳解Linux程式設計指令碼變數
- Linux Shell指令碼程式設計while語句案例Linux指令碼程式設計While
- shell指令碼(6)-shell陣列指令碼陣列
- Shell程式設計-01-Shell指令碼初步入門程式設計指令碼
- shell指令碼程式設計筆記指令碼程式設計筆記
- 7.shell指令碼程式設計指令碼程式設計
- Linux命令和shell指令碼學習Linux指令碼
- shell高效程式設計:shell指令碼從未如此美麗程式設計指令碼
- Linux Shell指令碼Linux指令碼
- linux Shell 命令列-03-array Shell 陣列Linux命令列陣列
- Shell指令碼程式設計規範與變數(shell指令碼必須要知道的規矩!)指令碼程式設計變數
- LINUX Shell指令碼程式設計例項詳解(一)上Linux指令碼程式設計
- shell指令碼linux命令連續執行指令碼Linux
- Shell程式設計-read命令程式設計
- Linux_day06_01_Shell指令碼程式設計_Bash基礎Linux指令碼程式設計
- shell指令碼命令 執行python檔案&python命令列執行python程式碼指令碼Python命令列
- Linux之shell程式設計Linux程式設計
- Linux Shell程式設計(1)Linux程式設計
- Linux Shell程式設計(2)Linux程式設計
- linux常用的shell指令碼Linux指令碼
- shell簡單命令大全。
- 好程式設計師雲端計算培訓分享Linux Shell常見命令總結大全程式設計師Linux
- Shell命令列命令列
- Linux shell:執行shell指令碼的幾種方式Linux指令碼
- 史上最全shell指令碼程式設計語法上冊指令碼程式設計
- shell指令碼程式設計學習筆記-運算子指令碼程式設計筆記
- shell指令碼程式設計學習筆記——變數指令碼程式設計筆記變數
- shell指令碼程式設計之選擇控制結構指令碼程式設計
- Linux與Shell 第2天 實操、軟體包管理、Shell程式設計Linux程式設計
- 通用程式部署shell指令碼指令碼
- linux shell指令碼中 =~ 的作用Linux指令碼
- Linux 【Shell指令碼經典案例】Linux指令碼
- Linux基礎五(shell指令碼)Linux指令碼
- 【Linux】【Shell】主控指令碼實現Linux指令碼