說到Linux必然會提到文本編輯工具Vim和腳本語言Shell,阿裡的團隊對於你用什麼寫代碼是無要求的,這些都是自選,但是對著測試機那個純文本的操作界面實在蛋疼不已。對圖形界面的依賴還是早日切斷為好,我曾經幻想著可以用Eclipse寫就不需要VI了。。結果還是不得不面對這樣的宿命啊。程序員的命,即使不裝酷也為了生計,去學習吧!
特別對於腳本,其實很多人會說Python,但Shell畢竟是Linux原生態的,不會Shell怎麼能說會Linux呢?我的老大說的。
Vi :
三種模式:命令,編輯,一般模式
在一般模式下輸入 i, o ,a 或者Insert鍵 就可用進入編輯模式
編輯模式下按ESC就回到一般模式
命令模式下輸入q退出,w保存, 加 ! 強制執行
U回退操作,ctrl+R 撤銷回退
概念:用戶,群組,權限
權限(0 RWX RWX RWX) 分別表示文件類型,所有者權限,所在群組權限,用戶權限
Vi替換和查找
[Ctrl] + [f]
屏幕『向前』移動一頁(常用)
[Ctrl] + [b]
屏幕『向後』移動一頁(常用)
:n1,n2s/word1/word2/g
在第 n1 與 n2 行之間尋找 word1 這個字符串,並將該字符串取代為 word2 !(常用)
:1,$s/word1/word2/g
從第一行到最後一行尋找 word1 字符串,並將該字符串取代為 word2 !(常用)
:1,$s/word1/word2/gc
從第一行到最後一行尋找 word1 字符串,並將該字符串取代為 word2 !且在取代前顯示提示字符給使用者確認(conform)是否需要取代!(常用)
u
復原前一個動作。(常用)
yy
復制游標所在的那一行(常用)
nyy
復制光標所在的向下 n 列,例如 20yy 則是復制 20 列(常用)
p, P
p 為復制的數據在光標下一行貼上,P 則為貼在游標上一行!(常用) 與復制結合使用
dd
刪除游標所在的那一整列(常用)
ndd
刪除光標所在的向下 n 列,例如 20dd 則是刪除 20 列(常用)
Shell優點:
命令編修
檔案及補全(文件名與命令補全使用Tab)多按Tab是個好習慣
命令別名 Alias lm='ls -al'
重定向(這個概念很重要,有時候編程語言一堆語句完成的事情在腳本裡就是一個> < 或者>> <<....)
標准輸入;代碼為 0 ;或稱為 stdin ;使用的方式為 <
標准輸出:代碼為 1 ;或稱為 stdout;使用的方式為 1>
錯誤輸出:代碼為 2 ;或稱為 stderr;使用的方式為 2>
kill -l 1234 > /dev/log 2 > &1 前一部分是將執行進程終止的顯示結果輸出到/dev/log文件中,2>&1意思是將執行錯誤信息也輸出到/dev/log即標准錯誤與標准輸出位置一樣(此處可不同 2 > /dev/error )
管道命令(就像水管一樣,一個命令的輸入當成另一個的輸出,在文本處理上十分神奇)
通過|連接命令執行的結果 例子:ps|sort > a.txt
Shell腳本編寫:
Vi編輯 ,開頭要有#!/bin/sh 即執行腳本的位置
然後保存,chmod +x **.sh 添加可執行權限
然後執行 ./**.sh
help test|less 可以查看Shell判斷語句test或者說是[ ]提供的基本功能,包括文件判斷字符判斷數值判斷等。
例子,輸出當前路徑下所有文件夾(加[[...]]僅僅是習慣問題,一個也可以)
#!/bin/sh
for file in *
do
if [[ -d $file ]]
then
echo $file
fi
done
通過declare -i a=4 可將變量a申明為整形
在SHell腳本中 $0 $1 $2....0表示該腳本的名稱 1,2,3 ...N 分別表示第幾個參數
$?表示上一條Shell語句執行完成的狀態碼,用於檢驗執行情況,只有返回0是正確的,其余為各種錯誤。
執行語句並查看返回結果例子,查看系統的某些端口是否在活動:
#!/bin/sh
cmd='netstat -an |grep :80'
if [[ $cmd != "" ]]
then
echo "Running"
else
echo "Stop"
fi
調試Shell腳本的語句
sh [-nvx] scripts
-n :不要執行 scripts ,查詢 scripts 內的語法,若有錯誤則予以列出!
-v :在執行 scripts 之前,先將 scripts 的內容顯示在屏幕上;
-x :將有使用到的 scripts 內容顯示在屏幕上,與 -v 稍微不同!