為什么使用shell
可以快速、簡單的完成編程,實作自己的想法,Shell非常適合撰寫小的工具,因為小工具更強調的是易于配置、維護、移植等,而不是執行效率,
當自己的想法確實有必要進行優化,有必要讓它更容易修改以及修正設計目的時,可以將shell撰寫的工具重新用C、C++/python等語言重新實作,
常見的shell有bash/csh/sh等
管道和重定向
ls -al > lsoutput.txt #將ls命令輸出的內容重定向到txt檔案 在>前加數字 0 1 2 分別代表輸入、標準輸出、錯誤輸出
引數2可以將錯誤輸出到檔案 而標準輸出的內容將顯示在螢屏上
>> #將輸出添加到檔案
丟棄不需要保存的輸出的方法
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
命令串列
-
AND串列
執行一系列命令,只有在前邊所有命令都執行成功的情況下才執行后一條命令
statement1 && statement2 && statement3 && …
&&的作用是檢查上一條陳述句的回傳值
AND串列是一系列命令作為一個整體,所有命令都執行,AND才算執行成功
-
OR串列
執行一系列命令直到一條命令成功為止
函式
function_name (){
statements
}
函式定義需要放到呼叫之前
當一個函式被呼叫時,腳本程式的位置引數($*/$@/$#/$1/$2等)都會被替換為函式的引數,當函式執行完,這些引數將會恢復他們之前的值
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/142330.html
標籤:Linux
