如何向CShell Script傳遞參數?
如何將命令行的參數傳給script呢? 可以這樣: 鍵入script名, 後面跟任何你想要傳遞的參數. Cshell把script名後面的字符按照詞(words)來劃分後傳遞給一個叫做argv的變量數組, 叫做arguments list. 這樣命令行的參數就作爲words存儲於argv中, 連同script名, 分別可以被引用爲argv[0], argv[1], ... argv[n], 或者你也可以用等效的方法即$0,$1,...,$n來引用它們,其中n是參數的個數.
Cshell基本語法
1) 變量
通過set來定義局部變量x,通過$x(或${x})來使用變量x的值,$%x表示變量的值的長度, $?x來判斷變量x是否設置,如設置則爲1,否則爲0。
set x = 5
echo ${x} # echo ${x}, echo $%x
全局變量(也叫系統變量)的定義setenv v value 該變量將被此shell派生的所有子shell繼承。下面的例子展示了設定系統變量和解除系統變量。
unsetenv MINUS_SRC_USER
setenv MINUS_SRC_USER dv01055
$$表示當前進程的PID,
$status 或 $? 表示退出狀態。
2)數組
定義數組myarr, 通過$myarr[index]來訪問數組中的值,注意index是從1開始的。通過$myarr或$myarr[*]來訪問數組所有的元素。通過$#myarr來查看元素的個數。
set myarr = (str1, str2, str3)
echo $myarr[2] # echo $myarr echo $myarr[*]
3)命令替換
通過set x = `cmd`來執行命令,且結果賦值給變量。
set d = `date`
echo $d # echo $d[6]-$d[2]-$d[3]
4)命令行參數
通過$argv[1],$argv[2]或$1,$2來訪問命令行參數。命令行參數的個數爲$#argv。
5)文件名擴展的元字符
只能使用?,*,[abc],[a-c]。
6)IO重定向和管道
將命令的輸出重定向到文件爲>。
將命令的輸出重定向並追加到文件爲>>。
將命令的輸入重定向到文件爲<。
將命令的報錯信息重定向到一個文件(cmd>/dev/tty) >& errors。
將命令的輸出和錯誤輸出分別重定向(cmd > goodstuff) >& badstuff。
將命令的輸出和報錯信息重定向到一個文件cmd >& file。
將命令的輸出經管道發往另一個命令cmd | cmd.
將命令的輸出和報錯信息經管道發往另一個命令cmd |& cmd。
條件語句爲 cmd && cmd 或 cmd || cmd。
command<<WORD 表示將command的輸入重定向爲從第一個WORD處開始,到下一個WORD處之間的內容(即here文檔)。
7)從鍵盤讀取並保存到變量中,從命令行獲取輸入:
set var = $< </span>
set d = `data`
8)算術
@var = 5 + 5
echo $var
@v2 = $var + 3
echo $v2
9)代字符號擴展
~username 表示username的home目錄。
10)別名
alias m more #爲more創建別名m。
alias #列出所有的alias。
unalias m #用來刪除more的alias定義。
11)初始化文件
.login 在登錄時執行的文件。.cshrc 在每次調用shell時都執行的文件。
12) label 和 goto
csh中沒有函數的概念,使用類似windows批處理中的label和goto。
goto label
......
label:
....
13) if/else/switch/case
if(xxx) then
commands
endif
if(xxx) then
commands
else if(xxx) then
commands
else
commands
endif
switch("$value")
case pattern1: commands1 breaksw
case pattern2: commands2 breaksw
default: commands breaksw
endsw
14 while/foreach
while(xxx)
commands
continue
break
end
foreach var (wordlist)
commands
end
15、repeat
repeat表示重複執行後面的命令。
repeat 3 "echo helloworld"
16、csh中設置環境變量PATH的方法
csh中使用path代替PATH,設置類似於數組的使用。
set path = ($path /home)
echo $path # echo $PATH
17、source等價於其他shell中的內容.
source使得程序在當前的shell中被執行,而不是派生子進程來執行。
18、轉義字符與單雙引號
引號必須成對出現,而且必須在同一行上配對。可以用反斜槓來轉義換行符,這樣就能在下一行配對了。
單引號可用於保護雙引號,雙引號也可以用來保護單引號。
單引號保護除歷史字符(!)之外的所有元字符不被解釋。
雙引號保護除歷史字符(!),變量替換字符($)和反引號(用於命令替換)之外的所有元字符,使其不被解釋。
19、歷史command
history 用來查看command執行的歷史。
!! 用來執行上一條命令。
20、pushd和popd用來維護目錄棧
21、csh -vx用來顯示輸入的原樣和變量替換後的腳本,用來幫助調試(csh 調試)。
22、在腳本中處理中斷
onintr finish
finish:
onintr - # Disable further interrupts
echo Cleaning temp files
exit 1
onintr 命令後跟一個標號名,finish是用戶自定義的標號。如果發生中斷,控制將被轉移到finish標號。通常該行位於腳本的開頭。除非當程序正在執行時按ctrl+C(中斷鍵),此時控制將被轉移到該標號。onintr - 表示屏蔽所有的中斷,此時按下ctrl+C將會被忽略。
23、noclobber 禁止覆蓋變量,設定 $noclobber 預設變量改變輸出重定向特性.
變量設定語法set noclobber
取消變量設定語法unset noclobber
這個 noclobber 變量,它的功能便是停止重定向符號“>”的覆蓋(overwiting)已存在文件以及符號“>>”要將字符寫入一個不存在的文件時,自動產生該文件的特性。
24、文件操作格式
-操作符 filename
-e 文件存在返回1(.true.), 否則返回0(.false.).
-r 文件可讀返回1,否則返回0.
-w ....可寫................
-x ....可執行...............
-o 文件屬於用戶本人返回1, 否則返回0.
-z 文件長度爲0返回1, 否則返回0.
-f 文件爲普通(plain)文件返回1, 否則返回0.
-d 文件爲目錄文件時返回1, 否則返回0
25、路徑名操作
你可以對路徑名進行操作, 以便於去掉你不需要的部分.
:t (tail)只保留路徑名最右邊的部分, 而將前面的全部去掉. (相當於basename)
:r (root)去掉從"."(dot)開始的後綴部分.
:e (end)去掉從左邊開始一直的"."的前綴部分.
:h (head)去掉最後的一部分, 只保留文件所在的目錄名.
26、變量修飾符
:r 返回變量的根。
:e 返回變量的擴展。
:h 返回變量的頭。
:t 返回變量的尾。
:gr 返回所有的根。
:ge 返回所有的擴展。
:gh 返回所有的頭。
:gt 返回所有的尾。
:q 將一個單詞列表變量引起來,將其各部分分隔開。當變量中包含不應進行擴展的文件名元字符時,該選項比較有用。
:x 將一個模式引起來,並將它擴展成單詞列表。
set aa=(/progs/num.c /book/chap.ps)
變量部分 格式 輸出結果
正常變量 echo $aa /progs/num.c /book/chap.ps
第二個根 echo $aa[2]:r /book/chap
第二個頭 echo $aa[2]:h /book
第二個尾 echo $aa[2]:t chap.ps
第二個擴展 echo $aa[2]:e ps
根 echo $aa:r /progs/num /book/chap.ps
全部根 echo $aa:gr /progs/num /book/chap
頭 echo $aa:h /progs /book/chap.ps
全部頭 echo $aa:gh /progs /book
尾 echo $aa:t num.c /book/chap.ps
全部尾 echo $aa:gt num.c chap.ps
擴展 echo $aa:e c /book/chap.ps
全部擴展 echo $aa:ge c ps
27、打印系統時間
%H 小時(以00-23來表示)。
%I 小時(以01-12來表示)。
%K 小時(以0-23來表示)。
%l 小時(以0-12來表示)。
%M 分鐘(以00-59來表示)。
%P AM或PM。
%r 時間(含時分秒,小時以12小時AM/PM來表示)。
%s 總秒數。起算時間爲1970-01-01 00:00:00 UTC。
%S 秒(以本地的慣用法來表示)。
%T 時間(含時分秒,小時以24小時制來表示)。
%X 時間(以本地的慣用法來表示)。
%Z 市區。
%a 星期的縮寫。
%A 星期的完整名稱。
%b 月份英文名的縮寫。
%B 月份的完整英文名稱。
%c 日期與時間。只輸入date指令也會顯示同樣的結果。
%d 日期(以01-31來表示)。
%D 日期(含年月日)。
%j 該年中的第幾天。
%m 月份(以01-12來表示)。
%U 該年中的週數。
%w 該周的天數,0代表週日,1代表週一,異詞類推。
%x 日期(以本地的慣用法來表示)。
%y 年份(以00-99來表示)。
%Y 年份(以四位數來表示)。
%n 在顯示時,插入新的一行。
%t 在顯示時,插入tab。
MM 月份(必要)
DD 日期(必要)
hh 小時(必要)
mm 分鐘(必要)
ss 秒(選擇性)