shell 是一種命令行程序, linux 用戶可以通過 shell 與操作系統內核進行交互。
shell 分為好幾種:sh,bash,csh,tcsh, 其中 tcsh 是 csh 的增強版,常用的兩種 shell 就是 bash 和 tcsh。
一般linux 默認shell 是 bash,但是IC公司用的較多的是 tcsh,二者的語法和內建命令相差較大,關於bash,網上資料非常多,這里主要記錄 tcsh 的語法和基本命令。
具體使用哪個shell 可以在腳本第一行定義: #! /bin/bash 或者 #! /bin/tcsh
查看當前默認shell 可以看環境變量 echo $SHELL
tcsh 基本語法:
1. 創建字符串變量: set var = hello; set var01 = “hello world” ;echo $var # 注意等於號
創建數值變量: @ num = 101 ; @ n01 = $num * 2 ; echo $n01 # 注意用 @ 開頭,且@與變量之間需留空格
2. 控制流(if while foreach )
(a). if (condition) then # 注意 if 和 then 必須寫在同一行,if 條件用小括號
cmd01
cmd02 # 可以寫很多行命令
else
cmd03
endif # 一定要有這個 endif 結束
(b). while ( condition )
cmd01
end
(c). foreach var ( var-list )
cmd01
end
3. 測試表達式
if ( -e file01 ) then # 檢測文件 file01 是否存在
cmd01
end
常用檢測命令:
-e file01 檢測文件 file01 是否存在,存在則返回 1, 否則返回 0
-f file01 檢測文件 file01 是否是普通文件
-d file01 檢測文件 file01 是否是目錄
-w file01 檢測文件 file01 是否可寫
4. 命令置換
如果要將一個shell命令的執行結果作為另一個命令的輸出,可以用 `cmd`,注意這里的 ` 不是單引號,而是鍵盤 ESC 下方那個鍵,比如:
echo stage_`date` #(而在 tcl 語言中,引用shell命令的格式是 echo stage_[sh date] )
echo " the stage finish at `date` " # 雙引號中的大部分特殊字符都會失去其特殊意義,但是有三種字符除外:變量置換符、命令置換符、轉義字符,即 " $ ` \ "
單引號中所有特殊字符都會變成普通字符,適合用在 alias 中
5. 連續執行
如果需要在一行命令中連續執行多條shell命令,有以下幾種寫法:
1) cmd1 ; cmd2 ; cmd3 # 按順序執行三個 cmd,不管是否成功執行
2) cmd1 && cmd2 && cmd3 # 順序執行三個 cmd,只有前邊的 cmd 執行成功,才會繼續執行
3) cmd1 || cmd2 || cmd3 # 如果 cmd1 執行成功,就不執行之后的 cmd。
6. 其他命令
setenv var value # 設置環境變量 var ,全局可用,注意這里沒有等於號
printenv env_name # 顯示環境變量,如果沒參數,就顯示所有環境變量
umask 022 # 設置新建文件默認屬性, 022 是八進制,且表示取消掉權限,所以等價於 chmod 755
7. 幾個 tcsh 實例
1). 每隔半小時檢測一次 flag 文件是否存在,不存在就繼續等待,若存在就執行make run
文件名 auto_run.sh :
to be continue ...
|--------------------------------------|