shell script

exec 5>&2  
exec 2> /tmp/$0.log

....

exec 2>&5
exec 5>&-    //關閉fd5

重定向時, &其實相當於c語言中的*,  &2即進程中的fd2指向的
system-wide opened file table中的終端
理解這個就不難理解以上的語句


exec沒有程序參數時,就是改變shell的輸入輸出fd
exec在shell中 就直接接管shell了, 運行權不會重新恢復到shell中
而在shell中調命令, 則是fork, exec, 最終控制權會回到shell

shell中的通配符
?       單一字符
*       任何的字符字符串
[set]   任何在set裏的字符
[!set]  任何不在set裏的字符


命令替換 (command substitution)
儘量使用 $() 來替代 ``, 那是因爲`` 裏面的單引號,雙引號都需要轉義

引用(quoting) 是用來防止Shell將某些你想要的東西解釋成不同的意義
舉例來說, 如果你要命令接受含有meta字符的參數, 如 * 或 ? , 就必須將這些
meta字符用引號引起來

back slash
\   單一字符轉義
' ' 完全不處理''內的shell特殊字符, back slash在''內不能用
" " 處理shell內的特殊字符, 但是可以在""之內使用\進行轉義

所以如果不打算原樣輸出使用''
希望shell做一些事情用" "進行引用

p191 有一張圖
引用可用來避開執行程序的不同部分, eval命令可讓你再經歷一次這一流程.
執行兩次命令行的處理, 看來似乎有點怪, 不過這卻是相當好用的功能: 它讓你
編寫一個腳本, 可在任務中建立命令字符串, 再將他們傳遞給Shell執行. 這麼一來,
你可以讓腳本聰明地修改它們自己執行時的行爲.



shell中 變量賦值 a=b  "="兩邊不能有空格 
todo中應該有一部分shell的總結 貼上來










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章