1.從腳本或終端或bash -c選項后的字符串中獲取輸入
2.將獲取的輸入分解成詞元(token),此步驟會執行別名(alisa)展開
1)shell識別出的一個字符序列單元稱為詞元,shell一般通過元字符(metacharacter)將得到的輸入進行分割,得到若干個詞元,再對詞元進行處理。
2)shell的元字符有:space,
tab,
newline,‘|’, ‘&’, ‘;’, ‘(’, ‘)’, ‘<’, or ‘>’.元字符用於詞元分割符;
3)shell中的詞(word):不包含非轉義元字符的字符序列;
4)shell中的操作符(operator):newline,‘||’, ‘&&’, ‘&’, ‘;’, ‘;;’, ‘;&’, ‘;;&’, ‘|’, ‘|&’, ‘(’, or ‘)’.
5)詞和操作符都是詞元
3.將詞解析為簡單命令或復合命令
1)簡單命令是由空格進行分割的詞組成的序列
2)復合命令包括循環結構,條件結構,命令組
4.執行各種shell展開
1)shell主要有七大展開:大括號展開,波浪符展開,參數展開,命令替換,算術展開,分詞,文件名展開;
2)展開執行完后,沒有轉義的\,',”會被移除。
5.執行必要的重定向,
6.執行命令
如果命令中包含/,則執行制定路徑的程序;如果命令中不包含/,會檢查是否是shell函數,shell內建命令,如果都不是,則在PATH環境變量中的路徑進行查找。
7.等待命令結束獲取命令執行狀態