爲何使用shell python
能夠快速、簡單的完成編程,實現本身的想法。Shell很是適合編寫小的工具,由於小工具更強調的是易於配置、維護、移植等,而不是執行效率。 shell
當本身的想法確實有必要進行優化,有必要讓它更容易修改以及修正設計目的時,能夠將shell編寫的工具從新用C、C++/python等語言從新實現。編程
常見的shell有bash/csh/sh等bash
管道和重定向 函數
ls -al > lsoutput.txt #將ls命令輸出的內容重定向到txt文件 在>前加數字 0 1 2 分別表明輸入、標準輸出、錯誤輸出 工具
參數2能夠將錯誤輸出到文件 而標準輸出的內容將顯示在屏幕上 測試
>> #將輸出添加到文件 優化
丟棄不須要保存的輸出的方法 spa
Kill -l 1234 >/dev/null 2>&1 #將標準輸出與錯誤輸出都丟棄到系統垃圾箱 設計
| 管道 用來鏈接進程 經過管道鏈接的進程能夠同時運行,並自動協調數據流
1 Ps > psout.txt #輸出ps內容到psout.txt 2 Sort psout.txt > psout.out #對psout.txt內容進行排序 輸出到psout.out中
管道寫法
1 Ps | sort | pssort.out #將ps內容排序後輸出
自動搜索文件夾下 全部文件中包含的 某字符串
More $(grep -l POSIX *) #在當前文件夾下的文件中 搜索POSIX字符串 打印出包含字符串的文件名
建立腳本
1.在腳本第一行添加 #!/bin/sh
2.把腳本設置爲可執行 chmod +x 腳本文件名
3.設定腳本的權限
shell語法
1.變量 不須要提早申明,變量被用到時會自動建立,全部變量被看作字符串來存儲 獲取變量內容用$字符,
若字符串裏包含空格,則須要使用括號將字符串括起來,此外,等號兩邊不能有空格
$() 或 $"" 用變量的值替換此處的內容 注意 $''不發生替換
2.環境變量&參數變量
$0 當前腳本的文件名
$n 傳遞給腳本的參數n,好比$1表示第一個參數
$# 傳遞給腳本或函數的參數個數。
$*,$@ 傳遞給腳本或函數的全部參數
$? 上個命令的退出狀態,或函數的返回值。
$$ 當前Shell腳本所在的進程ID
$HOME 當前用戶家目錄
$PS1 給出當前用戶名、機器名和當前目錄名
$* 在一個變量中列出全部參數 參數間用IFS中第一個字符分隔開
$@ $*的變體 列出全部參數 與IFS無關 參數之間用空格分開
3.條件
test & [ 命令:shell布爾判斷命令
檢查一個文件是否存在
1 if test -f fred.c 2 then 3 … 4 fi 5 #或者 6 if [ -f fred.c ] 7 then 8 … 9 Fi
4.控制結構
條件判斷
1 if condition 2 then 3 statements 4 else if condition; then 5 statements 6 else 7 statements 8 fi
循環語句
1 for variable in values 2 do 3 statements 4 5 done 6 exit 0 7 8 9 while condition; do 10 statements 11 12 done 13 14 15 until condition 16 do 17 statements 18 19 done 20 21 #until與while的條件測試相反 22 23 case variable in 24 pattern [ | pattern] …) statements;; 25 pattern [ | pattern] …) statements;; 26 … 27 esac
命令列表
執行一系列命令,只有在前邊全部命令都執行成功的狀況下才執行後一條命令
statement1 && statement2 && statement3 && …
&&的做用是檢查上一條語句的返回值
AND列表是一系列命令做爲一個總體,全部命令都執行,AND纔算執行成功
執行一系列命令直到一條命令成功爲止
函數
function_name (){
statements
}
函數定義須要放到調用以前
當一個函數被調用時,腳本程序的位置參數($*/$@/$#/$1/$2等)都會被替換爲函數的參數,當函數執行完,這些參數將會恢復他們以前的值