1,什么是Shell
Shell 是kernel的一個外殼,是一個命令解析器,負責用戶與內核的交互。
2,Shell腳本
Shell腳本類似於批處理,可以方便的執行大量命令。
3,編寫shell腳本
(1),用編輯器打開一個文件,首行固定格式,加入:
#!/bin/bash。
#注釋,第一行格式固定
一個好的程序文件,添加注釋是很重要的,即使很長時間不用,當再次使用時,也能很容易的回想起此程序的功能。
(2),編寫shell腳本。
這個就是最主要學習的地方,至於怎么學習,學習什么,只有之后用心了。建議從最簡單的Linux命令開始學習。
4,運行shell
(1),賦予文件執行的權限。
chmod +x file1name
(2),執行shell文件
在終端下輸入:
./ filename
Remark:以上3,4兩步都是在終端下操作。當然如果編寫能力很強第3步可以在其他編輯器中編寫。
以下為一些常用命令和符號:
- 管道操作符 (|) ,將一個命令的輸出作為另外一個命令的輸入。
grep "hello" file.txt | wc -l
在file.txt中搜索包含有”hello”的行並計算其行數。
在這里grep命令的輸出作為wc命令的輸入。
- 重定向:將命令的結果輸出到文件,而不是標准輸出(屏幕)。
> 寫入文件並覆蓋舊文件
>> 加到文件的尾部,保留舊文件內容。
- 反短斜線(`)——鍵盤Esc鍵下面的按鍵對應的英文符號,使用反短斜線可以將一個命令的輸出作為另外一個命令的一個命令行參數。
find . -mtime -1 -type f -print
用來查找過去24小時(-mtime –2則表示過去48小時)內修改過的文件。
如果您想將所有查找到的文件打一個包,則可以使用以下腳本:
#!/bin/sh # The ticks are backticks (`) not normal quotes ('): tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
- 通常用" [ ] "來表示條件測試。注意這里的空格很重要。要確保方括號的空格。
[ -f "somefile" ]
判斷是否是一個文件
[ -x "/bin/ls" ]
判斷/bin/ls是否存在並有可執行權限
[ -n "$var" ]
判斷$var變量是否有值
[ "$a" = "$b" ]
判斷$a和$b是否相等
[ -r "$mailfolder" ]
判斷$mailfolder是否可讀
[ -d $TARGET_DIR ]
判斷$TARGET_DIR是否是一個文件夾
-
特殊的變量$1,該變量包含了傳遞給該程序的第一個參數值。
-
$? :是上一條命令的返回碼。
[ $? -eq 0 ]
測試上一條命令的是否執行成功.
- 特殊的變量$*,該變量包含了所有輸入的命令行參數值。
- 特殊的變量$#,表示命令參數個數。
- 轉義字符——反斜桿(\)。在向程序傳遞任何參數之前,程序會擴展通配符和變量。這里所謂擴展的意思是程序會把通配符(比如*)替換成合適的文件名,把變量替換成變量值。為了防 止程序作這種替換,您可以使用引號。單引號更嚴格一些,它可以防止任何變量擴展;雙引號可以防止通配符擴展但允許變量擴展;還有一種防止這種擴展的方法,那就是使用轉義字符——反斜桿(\)。