天天看點

《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  程序 子程序 都會受到環境變量的影響。

繼續閱讀