1、腳本之間傳遞參數 "1.sh"的腳本,接受參數。如下,如果有一個參數則指派個sourceFile這個變量,否則用預設值。
備注:這裡$#是傳遞參數的個數,$1 是具體的參數。
關于if else:
如果兩條指令寫在同一行則需要用";"号隔開,一行隻寫一條指令就不需要寫";"号了。和[指令一樣,要注意指令和各參數之間必須用空格隔開。if指令的參數組成一條子指令,如果該子指令的Exit Status為0(表示真),則執行then後面的子指令,如果Exit Status非0(表示假),則執行elif、else或者fi後面的子指令。if後面的子指令通常是測試指令,但也可以是其它指令。Shell腳本沒有{}括号,是以用fi表示if語句塊的結束。
"2.sh"的腳本,傳遞參數
備注:多個參數之間用空格符隔開。
2、檔案内容行之間的排序
備注:“=”表示按=号進行切割(注意:隻能是單個字元),“+4”表示按第五個項進行排序。
更多參數:
-r 表示降序排序
-n 表示按數字大小排序
-k 表示根據那個字段排序,4.1,表示第4列第一個字元開始 ,5表示到第5個字段為結束
-t 後面跟分隔符,預設是空格
例如:sort -r -n -k4.1,5
3、判斷目錄是否存在,沒有則建立一個目錄
4、判斷檔案是否存在,有則删除
5、找出檔案中的相關行
備注:把檔案中包含關鍵詞的行輸出到result.log中。
6、檔案切分
備注:“”表示分隔符,“print”表示換行輸出(printf不換行),“$1”表示取第一項。“檔案”表示要切分的檔案
7、檔案内容排重
備注:“,”表示按“,”号分隔;“$1”表示按第一項排重;“test.txt”表示要處理的檔案。
8、grep多個關鍵字
備注:多個關鍵字用“\|”分隔。
9、時間格式化,中間有空格的需要加引号
10、多個檔案合并
11、運作java項目
備注:“/usr/java/latest/bin/java”表示Java環境,“-cp”表示classpath路徑,“.”表示目前目錄,“-Djava.ext.dirs”表示jar檔案所在目錄,“-a”表示參數名稱,“參數1”表示參數值。
12、根據關鍵字統計行數,指派給變量
備注:“$FILE”表示要統計的檔案,“關鍵字”要包含的關鍵字,“wc”統計檔案(-l行數,-w字數,-c位元組數)
wc指令的功能為統計指定檔案中的位元組數、字數、行數, 并将統計結果顯示輸出。
文法:wc [選項] 檔案…
說明:該指令統計給定檔案中的位元組數、字數、行數。如果沒有給出檔案名,則從标準輸入讀取。wc同時也給出所有指定檔案的總統計數。字是由空格字元區分開的最大字元串。
該指令各選項含義如下:
-c 統計位元組數。
-l 統計行數。
-w 統計字數。
這些選項可以組合使用。 輸出列的順序和數目不受選項的順序和數目的影響。總是按下述順序顯示并且每項最多一列。 行數、字數、位元組數、檔案名 如果指令行中沒有檔案名,則輸出中不出現檔案名。 例如: $wc -lcw file1 file2 4 33 file1 7 52 file2 11 11 85 total 省略任選項-lcw,wc指令的執行結果與上面一樣。
13、基本算術計算的方法(5種)
a.[b]使用awk計算[/b]
備注:示例2和示例3兩種寫法除數和被除數都要加“'”号(單引号),否則會報錯“division by zero attempted”,另外“BEGIN”也很重要哦。
b.[b]使用bc指令[/b]
c.[b]使用expr指令[/b]
d.[b]使用let指令[/b]
e.[b]加雙括号[/b]
備注:此種寫法括号裡面的變量可以不用加“$”符号,但是括号外面的“$”符号一定要加上。
14、運用tee指令将日志同時輸出到多個檔案
tee用法功能說明:讀取标準輸入的資料,并将其内容輸出成檔案。
語 法:tee [-ai][--help][--version][檔案...]
補充說明:tee指令會從标準輸入裝置讀取資料,将其内容輸出到标準輸出裝置,同時儲存成檔案。
參 數:
-a或--append 附加到既有檔案的後面,而非覆寫它.
-i或--ignore-interrupts 忽略中斷信号。
-help 線上幫助。
-version 顯示版本資訊。
例1:日志在記入log1.txt和log2.txt的同時也在控制台輸出
備注:“-a”追加,否則清空重寫。
15、針對某個域進行分組統計
備注:“$FILE”要處理的檔案,用awk指令按“”進行切分,“$11”表示第11域(1,3,5,...),“var”表示分組名稱,“list[var]”表示每組的數量。
16、查詢控制指令的曆史記錄
備注:查詢包含“rm”字元的指令記錄。
17、循環删除所有檔案
備注:在檔案非常多的情況下,rm * 指令不能删除所有檔案。是以需要周遊删除每一個檔案。
18、周遊檔案夾并按第二個域對檔案内容排序。
19、檢視檔案夾下所有檔案數目和所有檔案夾數目
備注:“.”表示目前目錄,可以換成其他路徑。
20、shell與java正則差別
備注:JAVA中比對以“2010-11-08"開頭的字元串。
備注:SHELL中比對以“2010-11-08”開頭的字元串。
“.*”或“.+”在java中表示任意多個字元串,如果要比對“.”号,需要加轉義“\”。 “*”在shell表示任意多個字元,加“.”或“+”号都會錯誤。
21、編碼轉換指令
備注:表示把a.log檔案從gb2312編碼轉成utf-8的編碼,并把檔案寫入b.log
22、批量替換多個檔案中的字元串
備注:
-i 表示inplace edit,就地修改檔案
-r 表示搜尋子目錄
-l 表示輸出比對的檔案名
23、常用MySQL語句
//查詢mysql變量(timeout)
show variables like '%timeout'
//查詢緩存變量
show status like "Qcache%"
//查詢程序清單
show PROCESSLIST
24、清空memcache資料
telnet 10.27.5.71 11211
flush_all
quit //退出telnet
25、監控Tomcat并啟動
備注:定時監控tomcat,發現挂掉,立刻重新開機!并發送短信和郵件報告~
-t1 表示隻請求一次
-T2 表示2秒逾時
26、linux查找檔案的一些方法
1) 按檔案名查找
#在/opt目錄及其子目錄下查找包含檔案名是以zhjedu開頭的檔案
find /opt -name "zhjedu*"
2) 按時間查找
#在/opt目錄及其子目錄下查找最近1個小時修改的檔案
find /opt -mtime -1
#在/opt目錄及其子目錄下查找1個小時以前修改的檔案
find /opt -mtime +1
3) 按類型查找
#在/opt目錄及其子目錄下查找目錄及其子目錄
find /opt -type d
#在/opt目錄及其子目錄下查找所有的普通檔案
find /opt -type f
4) 按大小查找
#在/opt目錄及其子目錄下查找檔案大于10M的檔案
find /opt -size +10000k
27、curl指令的用法
參見1:[url]http://blog.sina.com.cn/s/blog_62b832910100tyfi.html[/url]
參見2:[url]http://javag.iteye.com/blog/499113[/url]
28、split切割大檔案
備注:将log1_6.log.2012-03-21檔案切割成10000行一個的以tt.txt開頭的N多個檔案
-l 表示按行切割
tt.txt 表示切割後的零碎檔案的字首
29、循環讀取行
讀取檔案每行并輸出
方法一:
方法二:
30、删除數量比較多的檔案
ls當然是輸出所有的檔案名(用空格分割)
xargs就是将ls的輸出,每20個為一組(以空格為分隔符),作為rm -rf的參數
也就是說将所有檔案名20個為一組,由rm -rf删除,這樣就不會超過指令行的長度了
31、for循環總結
a. for((i=1;i<=10;i++));do echo $(expr $i \* 4);done
b. 在shell中常用的是 for i in $(seq 10)
c. for i in `ls`
d. for i in ${arr[@]}
e. for i in $* ; do
f. for File in /proc/sys/net/ipv4/conf/*/accept_redirects; do
g. for i in f1 f2 f3 ;do
h. for i in *.txt
i. for i in $(ls *.txt)
for in語句與` `和$( )合用,利用` `或$( )的将多行合為一行的缺陷,實際是合為一個字元串數組
for num in $(seq 1 100)
j. LIST="rootfs usr data data2"
for d in $LIST; do
用for in語句自動對字元串按空格周遊的特性,對多個目錄周遊
k. for i in {1..10}
l. for i in stringchar {1..10}
m. awk 'BEGIN{for(i=1; i<=10; i++) print i}'
注意:AWK中的for循環寫法和C語言一樣的
參考:[url]http://hi.baidu.com/plp_cm/blog/item/d828d1881b05e2faf11f3607.html[/url]
32、格式轉換
dos2unix, unix2dos 用來實作 DOS <=> UNIX text file 轉換
33、根據起止日期列印期間的日期
34、用awk來對比兩個檔案
要求:輸出a.txt中包含b.txt的行
指令:
備注:awk參數用法:[url]http://bbs.chinaunix.net/thread-691456-1-1.html[/url][url]http://bbs.chinaunix.net/thread-1797847-1-1.html[/url]
substr($2,3):表示截取a.txt第二列從第三個字元開始的所有字元。
if($0 in a):如果b.txt的一行跟a.txt第二列截取字元的相等。
a.txt(資料源1)
----------------
12 x=abc
14 x=ccc
15 x=acd
b.txt(資料源2)
----------------
abc
ccc
efg
c.txt(結果)
----------------
12 x=abc
14 x=ccc
35、在root使用者下檢視端口被哪個使用者占用
lsof -i:8091
36、檢視一個關鍵字的前後N行
37、根據修改時間判定檔案數目(适用于大數目檔案夾哦)
備注:$6表示月份,$7表示日期(最近幾天隻顯示時間),$8表示年份。
如上指令表示:2012-08-21日産生的檔案數目
38、檢視軟體安裝的位置指令如下:
dpkg -L xxx (xxx為軟體名)
比如檢視gedit安裝的位置:
dpkg -L gedit
39、去除UTF-8 BOM SHELL腳本
查找UTF-8 BOM檔案:
grep -rl $’\xEF\xBB\xBF’ .
查找UTF-8 BOM檔案并更改成UTF-8 無BOM檔案:
find . -type f -exec sed ’1s/^\xEF\xBB\xBF//’ -i.bak {} \; -exec rm {}.bak \;
查找/path目錄下的UTF-8 BOM檔案并修改成UTF-8無BOM檔案
grep -r -I -l $'^\xEF\xBB\xBF' /path | xargs sed -i 's/^\xEF\xBB\xBF//;q'