別人寫命令,你也寫命令,命令知多少?
內部命令:整合在bash的命令,就是內部命令。內部命令依賴於shell型別。這些命令由shell程式識別並在shell程式內部完成執行,通常在linux系統載入執行時shell就被載入並駐留在系統記憶體中。內部命令是寫在bash原始碼裡面的,其執行速度比外部命令快,因為解析內部命令shell不需要建立子程序。
外部命令:外部命令是在bash之外額外安裝的,在檔案系統路徑$path有對應的可執行程式檔案,就是外部命令。在系統載入時並不隨系統一起被載入到記憶體中,而是在需要時才將其呼叫記憶體。
命令別名:在管理和維護linux系統的過程中,將會使用到大量命令,有一些很長的命令或用法經常被用到,重複而頻繁地輸入某個很長命令或用法是不可取的。這時可以使用命令別名功能將這個過程簡單化。
hash:系統初始hash表為空,當外部命令執行時,缺省會從path路徑下尋找該命令,找到後會將這條命令的路徑記錄到hash表中,當再次使用該命令時,shell直譯器首先會檢視hash表,存在將執行之,如果不存在,將會去path路徑下尋找。利用hash快取錶可大大提高命令的呼叫速率。
function: 函式是存在記憶體裡的一組**的命名的元素。函式建立於指令碼執行環境之中,並且可以執行
compound commands:在 shell 中指迴圈、判斷、分支、選擇、的表示式命令
命令查詢方式/命令的優先順序
1. 獲取乙個命令執行的優先級別,至上往下
alias
compound commands
function
build_in
hash
$path
error:command not found
練習:驗證命令的優先順序
命令解析順序
shell從標準輸入或指令碼中讀取的每行稱為乙個管道行,它包含乙個或多個由0個或多個管道字元(|)分隔的命令。對每乙個管道行,進行12個步驟的處理。
結合上面的插圖,這裡給出命令列的12個步驟。
1. 將命令列分成由固定元字符集分隔的記號 :
space, tab, newline, ; , (, ), <, >, |, &
記號型別包括單詞,關鍵字,i/o重定向符和分號。
2.檢測每個命令的第乙個記號,檢視是否為不帶引號或反斜線的關鍵字。 如果是乙個開放的關鍵字,如if和其他控制結構起始字串,function,變成ab ac
5.如果~位於單詞開頭,用$home替換~。使用usr的主目錄替換~user。
6.對任何以符號$開頭的表示式執行引數(變數)替換
7.對形式$(string)的表示式進行命令替換
這裡是巢狀的命令列處理。
8.計算形式為$((string))的算術表示式
9.把行的引數,命令和算術替換部分再次分成單詞,這次它使用$ifs中的字元做分割符而不是步驟1的元字符集。
10.對出現*, ?, [ / ]對執行路徑名擴充套件,也稱為萬用字元擴充套件
11. 按命令優先順序表(跳過別名),進行命令查尋
12.設定完i/o重定向和其他操作後執行該命令。
關於引用
1. 單引號跳過了前10個步驟,不能在單引號裡放單引號
2. 雙引號跳過了步驟1~5,步驟9~10,也就是說,只處理6~8個步驟。
也就是說,雙引號忽略了管道字元,別名,~替換,萬用字元擴充套件,和通過分隔符**成單詞。
雙引號裡的單引號沒有作用,但雙引號允許引數替換,命令替換和算術表示式求值。可以在雙引號裡包含雙引號,方式是加上轉義符"/",還必須轉義$, `, /。
簡單備份web 指令碼
#!/bin/bash
# web backup script
# variables and function definition
path=$path:/sbin:/usr/sbin:/usr/local/bin
ftphost='192.168.1.254'
ftpuser='ftpuser'
ftppassword='ftppasswd***'
backup_date=$(date -d '1 day ago' +%f)
# program main
cd /var/backup
find . -type f -mtime +2 -exec rm -f {} \;
tar czf web-$.tar.gz /var/www/html
# update data file
ftp -i -n 《備份 mysql 指令碼
刪除日誌指令碼
Linux 實用技巧
值得一提的是vim是慈善軟體 charityware 如有贊助或評比得獎,所得將全部救助烏干達孤兒,軟體使用是免費的,歡迎手頭有點閒錢的使用者捐款贊助,如果沒銀子也沒關係,至少當有評比活動時 有獎金可拿的那種 應用技巧一 快速注釋 1 連續行注釋 使用vim vi編輯shell指令碼,在進行除錯的時...
vim實用技巧
以前習慣於eclipse,sourceinsight,vim用的不是很熟悉,在現在的公司中,vim是一種必備的技巧,慢慢,從難受到得心應手,vim還是比較好用的,下面記錄一點實用的技巧 1 vim ctags cscope是乙個強大的比擬於sourceinsight的字元介面的工具 2 ctrl 跳...
SQL PowerDesigner實用技巧
1,name code的轉變 我們設計資料庫的時候,軟體會自動把name的資料複製到code中,但我想設計時直接把 欄位名稱與含義寫在name中,這樣對設計時間的浪費是很少的 如我們以 欄位名 中文含義 來寫name,讓軟體自動複製前面的 欄位名到 code中.讓中文函義 自動複製到 comment...