Shell腳本筆記

 
如何查詢文件裏的某個字符串?
grep 「字符串」 文件
例:grep "abc" tmp.txt
 
如何將查詢出來的內容賦給變量?
str=$(grep "abc" tmp.txt) 
 
如何打印變量的值?
echo $varname
注:要想引用變量,最好寫成${varname}的形式
 
如何在屏幕上輸出提示,讓用戶輸入y或n來選擇進行下一步?
echo -n "Continue?"
read ANS
case $ANS in
y|Y|yes|Yes)
    要執行的語句
    ;;
n|N|no|No)
    exit 0
    ;;
esac
注:read從標準輸入中讀取一行,並把輸入行的每一個字段的值指定給shell變量。
 
如何將命令在屏幕輸出的同時也寫入文件?
命令 | tee 文件
或:
your_script.sh 2>&1 | tee 文件
 
如何讓光標在屏幕上顯示在命令以後的位置而不是下一行?
echo -n 「命令」是取消echo以後自帶的換行符
 
如何啓用控制字符?
echo -e 「a\tb\tc\nd\te\tf」
 
如何註釋多行代碼?
:<<COMMENT
    要註釋的code
COMMENT
或在vim中,:50,70 s/^/#可註釋從50行到70行的內容
 
如何不執行腳本,只檢查語法?
sh -n your_script
 
如何調試?
sh -x your_script
會顯示全部變量,並執行腳本
 
如何產生隨機數?
a=RANDOM
echo $a
 
注意:
不管有多少縮進,EOT必定要頂格寫。
等號兩邊不能有空格。
if [ xxx ]; then xxxx; fi 括號和內容之間必須有一個空格。
調用函數只是fun,沒有括號與分號。
shell中的一切變量都是字符串類型。
變量多於一個單詞的話,必須用雙引號。
顯示特殊字符,好比就想顯示$a,可用單引號。
局部變量必須以local聲明。全局變量沒有什麼修飾。
全部寫入/dev/null的信息都消失了,不會保存在磁盤裏。若是將標準輸出和錯誤重定向到/dev/null,就能讓終端閉嘴。
相似於/dev/null,/dev/zero也是個僞文件,會產生一個null流,是二進制的0流。
輸出到/dev/tty的信息只會顯示在當前工做的終端顯示器上。
$#表明傳入函數的參數個數,$@表明全部參數
0 表示標準輸入,1 表示標準輸出,2 表示錯誤輸出
爲了展現一段memu以供客戶選擇,可使用select關鍵字
 
【截取字符串】

截取要求中的「最左」與「最右」
注意:pattern只能是從最左開始匹配,若是不包含第一個字符,那麼就不能工做。
${variable#pattern} - 截去從最左開始匹配的最短符合pattern的子串
${variable##pattern} - 截去從最左開始匹配的最長符合pattern的子串html

${variable%pattern} - 截去從最右開始匹配的最長符合pattern的子串
${variable%%pattern} - 截去從最右開始匹配的最長符合pattern的子串linux

例如:
variable="Now is the time"
echo ${variable} // 打印出 Now is the time
echo ${variable#N*i} // 打印出 s the time
echo ${variable##N*i} // 打印出 me
echo ${variable%time} // 打印出 Now is the
echo ${variable%%t*e} // 打印出 Now isshell

語法:${variable:offset:length}
例如:
var="hello"
var=${var:3:2}
echo $var //打印出 "lo"編程

 

 

【SHELL特殊的元字符】
*(pattern1|pattern2) 0次或者屢次觸發
例如,*([0-9]) 0個或者多個數字
?(pattern1|pattern2) 0次或者1次觸發
例如,?([0-9]) 0個或者1個數字
+(pattern1|pattern2) 1次或者屢次觸發
@(pattern1|pattern2) 僅僅1次觸發
!(pattern1|pattern2) 1次都不觸發
例如,!(err*|fail*)表示,不能以「err」或者"fail"開頭的詞vim

 

【保留變量】安全

$IFS  這個變量中保存了用於分割輸入參數的分割字符,默認識空格。
$HOME  這個變量中存儲了當前用戶的根目錄路徑。
$PATH  這個變量中存儲了當前 Shell 的默認路徑字符串。
$PS1  表示第一個系統提示符。
$PS2  表示的二個系統提示符。
$PWD  表示當前工做路徑。
$EDITOR 表示系統的默認編輯器名稱。
$BASH  表示當前 Shell 的路徑字符串。
$0, $1, $2, ... 表示系統傳給腳本程序或腳本程序傳給函數的第0個、第一個、第二個等參數。
$#   表示腳本程序的命令參數個數或函數的參數個數。
$$   表示該腳本程序的進程號,經常使用於生成文件名惟一的臨時文件。
$?   表示腳本程序或函數的返回狀態值,正常爲 0,不然爲非零的錯誤號。
$*   表示全部的腳本參數或函數參數。
$@   和 $* 涵義類似,可是比 $* 更安全。
$!   表示最近一個在後臺運行的進程的進程號。 編輯器


 

 

【參考文獻】ide

Shell腳本調試技術 http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/index.html函數

一個程序演示全部的shell編程知識 http://code.google.com/p/ldd6410/wiki/ShellScriptui

Linux Shell Scripting Tutorial A Beginner‘s handbook  http://www.freeos.com/guides/lsst/

相關文章
相關標籤/搜索