TCSHshell程式設計入門(轉)
TCSHshell程式設計入門(轉)[@more@]簡介TCSH shell不同於其他的shell,因為控制結構更符合程式設計語言的格式.例如TCSH 的test條件的控制結構是表示式,而不是linux命令,得到的值是邏輯值true或false,TCSH的表示式與C語言中的表示式基本相同.一,TCSH shell變數,指令碼,引數使用者可以在shell中定義變數,為變數賦值以及引用指令碼引數.TCSH使用set,@,setenv定義一變數,也可以用相同的方法定義數值變數和陣列,使用者透過@命令定義的數值變數來進行算術運算,使用者使用圓括號()和方括號[]定義和引用陣列.指令碼也可以用相同的方法操作,但是有個例外,儘管可以用echo命令輸出提示符,但沒有read命令處理輸入,相反,必須重定向到一個變數裡.二,指令碼輸入和指令碼輸出: $ <使用者能夠在指令碼範圍中定義和使用變數.在下例中,使用文字編輯器把賦值操作和echo之類的linux命令放在一個檔案中.然後, 可以產生可執行檔案並像其他命令一樣在命令行中執行它,要記住新增可執行許可權,必須使用帶u+x引數的chmod命令或者帶絕對參數700的chmod命令.在指令碼中,可以使用echo命令去輸出資料,但是,必須透過重定向標準輸入把輸入讀入變數.在TCSH中沒有linux read命令的比較版本.記住TCSH全部的腳本檔案的第一行的第一個字元必須是"#"字元.如:##display "hello"set string="hello"echo The value of string is $stringset命令和重定向符號結合$輸入讀入string變數中.%set string=$<abc%echo $stringabc能夠把提示符放置到相同的行用作echo的輸入.TCSH使用一個特殊的選項-n,將消除輸出字串中的回車符.游標將保留在輸出字串的結尾處.%echo -n please enter a string%cat hello#echo -n "please enter a string:"set string=$<echo "the value of string is $string"%chmod u+x hello%helloplease enter a string:hellothe value of string is hello%三,運算子TCSH有一系列標準的賦值,算術和關係運算以及重定向和後臺操作等函式賦值運算子 功能說明= 賦值操作+= 先加再賦值-= 先減再賦值*= 先乘再賦值/= 先除再賦值%= 取餘再賦值++ 自增量1-- 自減量1算術運算子 說明- 負號+ 加法- 減法* 乘法/ 除法% 取餘關係運算子 說明> 大於< 小於>= 大於等於<= 小於等於!= 不等於== 等於重定向和管道符TCSH支援標準輸入和標準輸出的重定向和管道操作.如果設定了noclobber特徵,要用重定向操作重寫當前檔案,需要用符號>!代替>四,控制結構同其他shell一樣,TCSH也有一系列的控制結構控制指令碼的命令的執行.while和if控制結構是最常用的控制結構.switch和foreach是更專用的控制結構.switch是if條件的限定形式,檢查數值是否等於一系列可能的數值中的一個數值.foreach是迴圈結構的限定形式.瀏覽數值列表,給變數賦新的數值.TCSH不同的控制結構列表:條件控制結構; 功能if (expression) then 如果expression為真,則執行commandscommandsendifif (expression) then 如果expression為真,則執行command1,否則執行command1 command2.elsecommand2endifswitch (string) 允許在幾條替換命令中選擇,string為不同的模式case pattern:commandsbreadswdefault:commandsendsw迴圈控制結構: 功能while (expression) 只要expression為真,則重複執行commands,commands 直到expression為假時跳出迴圈endforeach variable (argument-list)迭代迴圈獲得和argument-list中一樣多的引數commands (每次迴圈variable被設定為列表的下一個引數;end 操作方式同BSH)TCSH中的控制結構有別於其他的shell,因為它更接近程式語言(C).TCSH的條件表達式的值為true/false.BASH和TCSH主要區別在於TCSH的結構不可重定向或進行管道輸出.五,測試表示式;()if和while控制結構把表示式用作測試.表示式測試的結果為非零(1)表示真,而零(0)表示假(跟BASH相反).測試表示式可由算術/字串比較,但是字串只能作相等和不相等的比較.而且表示式必須要在()括號內.如:if (expression) thencommandendifTCSH有一系列的運算子來分別對字串進行測試比較.正規表示式可以包含shell指令碼的指令的字串.如:if ( $var =~[Hh]* ) then #如果變數$var以字母是大寫/小寫Hh開頭,的字串echo information #執行命令endif #結束有很多測試檔案的操作與BASH完全相同.如:if ( -r myfile ) then #測試myfile是否可讀echo infoendif測試表示式的基本操作:字串比較: 功能== 是否相等,若相等返回真!= 是否不等,若不等返回真=~ 字串和模式進行測試是否相等(模式為任意正規表示式)!~ 字串和模式測試是否不等(模式為任意正規表示式)檔案測試: 功能-e 測試檔案是否存在-r 測試檔案是否可讀-w 測試檔案是否可寫-x 測試檔案是否可執行-d 測試檔名是否為目錄-f 測試檔案是否為普通檔案-o 測試檔案是否被使用者所擁有-z 測試檔案是否為空邏輯運算子: 功能&& 與運算,兩個條件同時蠻族|| 或運算,有一個條件滿足! 取反六,TCSH內建命令1,數字變數:@在TCSH中,用@命令代替set命令來宣告數字變數,然後進行算術,關係和位操作,數字和字串變數是兩個不同的物件,需要用不同的方法管理,不能把set用於數值變數的設定@命令由關鍵詞,變數名,賦值運算子和表示式構成.如:%@ num=10 #注意空格%@ sum=2 * ($num + 3)%echo $sum%262,alias格式:alias [name[command]]關鍵詞alias 別名name 引用的命令command如:alias list lsalias list 'ls -l'3,argv當指令碼被執行時,命令列中的單詞被分析並放入argv陣列中.argv[0],argv[1]...argv[n],其中argv[0]儲存命令名,argv[1]儲存命令的第一個引數,argv[n]命令的第n個引數.argv陣列元素可縮寫元素號碼,前面加$.如:$argv[1]寫為$1.$argv[*]寫為$*.#argv引數識別符號包含輸入在命令列中的引數號碼,可檢查$#argv變數.如:arglist#echo "The number of arguments entered is $#argv"echo "The list of arguments is : $argv[*]"%tcsh arglist a b cThe number of arguments entered is 3The list of arguments is : a b cargv變數列表:命令列引數 說明$argv[0]或$0 命令名$argv[n]或$n 從1($1-$)開始的第n個命令列引數$argv[*]或$* 從1開始的所有命令列引數$#argv或$# 命令列引數的計數4,bg格式:bg [%job]bg命令把指定的任務放入後臺.如果此任務已經停止,則繼續執行,如果沒有引數,將當前任務放入後臺.(詳細用法與BASH相同此處略)5,break格式:breakbreak命令用於退出最接近的foreach/while迴圈過程.執行同一行中其他的命令.6,breaksw格式:breaksw可以從switch語句處中斷,在endsw後繼續執行.7,builtins列出全部shell的內建命令表.8,cd格式:cd [-p][-l][-nl -v][name]如果給出目錄名,此命令把name設定為當前目錄,如果命令中沒有name,當前目錄自動設定成使用者主目錄.用於name的"-"引用上一級目錄,如果引數name沒有給出子目錄,或不是全路徑,或使用./或../引用當前目錄及父目錄,那麼就檢查在cdpath shell變數中列出的目錄來尋找該目錄名.如果此操作失敗,將檢查shell變數中是否儲存著的目錄路徑名.用-p選項,linux顯示目錄列表, 用-l,-n,-v選項與用在dirs命令中的選項完全相同.預設選項-p.9,continue此命令繼續執行最靠近while/foreach語句.當前行其餘的命令被執行.10,dirs格式:dirs [-l][-n|-v]dirs -S|-L [filename]dir -c如果不帶引數,dirs將顯示目錄列表,列表開頭被列在作側,第一個目錄是當前目錄.帶-l選項,使用者主目錄中的全部子目錄被展開,輸入項在到達螢幕邊緣時,-n選項隱藏輸入項,-v選項顯示每一行的輸入項入口,-c選項將清除目錄列表,-S選項可以把目錄列表作為一系列的cd和pushed命令儲存在檔案中,-L選項可以從指定的檔案中將cd和pushed命令讀入,該檔案包含-S選項所儲存的cd和pushed命令.如果沒有指定的檔案名,將使用賦值到dirsfile shell變數中的檔名.如果沒有設定dirsfile,將使用~/.cshdirs,在啟動時註冊shell將對dirs -L求值,如果設定了savedirs,退出前使用dirs -S,由於在~/.cshdirs之前,僅僅~/.tcshrc是正常來源,dirsfile應該以~/.tcshrc設定而不是以~/.login設定.11,echo格式:echo [-n] word/string此命令把每個單詞或字串寫入shell的標準輸出.可設定echostyle shell變數來模擬選項以及BSD的換碼序列或者echo的System V 版本.12,eval格式:eval argument...此命令把引數作為shell的輸入,執行當前shell的上下文中的結果命令,由於分析發聲在替換前,所以該命令通常用於執行命令或變數替代所產生的命令.13,exec格式:exec command此命令代替當前的shell執行指定的命令,並退出終端.14,exit格式: exit [expression]shell可以帶指定的表示式的值退出,如果沒有包含表示式,也可帶狀態變數值退出.15,fg格式:fg [%job...]把指定的任務帶到前臺,如果任務在終止狀態,在帶到前臺的同時使他執行.job引數是使用任務號或者下列字串之一的任務引用:' % + -16,foreach格式:foreach variable(list of values)commandsendforeach結構被設定為順序引用數值列表,它類似BASH shell的for in 結構.foreach結構產生兩個運算元:一個變數和一組包含在()中的數值列表.將列表中的值賦值到結構中的變數中.迴圈體的結尾由語句end構成.下例中指令碼list輸出由專案和foreach迴圈讀取每一項當前的日期構成的一行資訊,列表中的每一項被連續賦值到變數objectlist#set tdate=`date +%D`foreach object(milk cookies apples cheese)echo $object $tdateend%tcsh listmilk 04/26/03cookies 04/26/03apples 04/26/03cheese 04/26/03使用foreach迴圈有助於管理檔案,可以模式中的shell特定字元來產生用作數值列表的檔名列表,然後所產生的檔名列表就成為foreach結構引用的列表.如果在列表中不帶任何變數,可以使用命令列引數實現迴圈.list#set tdate=`date +D%`foreach object($argv[*])echo "$object $tdate"end%tcsh list a b ca 04/26/03b 04/26/03c 04/26/03使用argv[*]特殊引數變數,可以直接引用命令列引數.下例中,當呼叫shell指令碼cbackuparg時,在命令列下輸入C程式檔案的列表,在foreach迴圈中,argv[*]引用命令列中的所有引數,將按順序把各個引數賦值給變數backfile,變數argnum用於引用每個引數.顯示引數和backfile的值來說明它們兩個是相同的.原始碼:cbackuparg#@ argnum=1foreach backfile ($argv[*])cp $backfile sourcebak/$backfileecho "$backfile $argv[$argnum]"@ argnum=$argnum+1end%cbackuparg main.c lib.c io.cmain.c main.clib.c lib.cio.c io.c17,history格式:history [-hr][n]history -S|-L|M [filename]history -c如果history沒有任何引數,將顯示開行號的歷史命令列表.用作引數的號碼將列出行的最後號碼.如果沒有任何選項引數,她將用作歷史檔名;否則,將使用hisfile變數值.用-h選項,將以註釋的形式顯示不帶行號的歷史檔案列表用-r選項,將反向顯示,以最近的列表開始用-c選項,則清除歷史列表如果用-S選項,可以把歷史列表存入檔案,如果savehist shell變數的第一個單詞被設定為數值,歷史檔案將被儲存為最大的行數,如果第二單詞為'merge',歷史列表將被合併到當前的歷史檔案中,而不替代歷史列表,時間圖章排序歷史列表.如果用-L選項,shell將從儲存的歷史列表檔案中讀取歷史列表並把她追加到當前歷史列表中.如果用-M選項,將從歷史檔案讀取歷史列表資訊,但用當前歷史列表資訊合併,排序歷史列表.如果沒有用這些選項給出檔名,那麼,就使用賦值到histfile shell變數的檔案名,如果沒有設定histfile,就使用~/.history.18,hup格式:hup [command]如果帶有括起來的command引數,hup執行command,根據停機訊號退出.當shell退出時,hup安排shell發出停機訊號.注意:命令也許設定自己的停機響應,重寫hup,如果沒有引數(只有在shell指令碼中才允許),hup使shell根據指令碼的餘項的停機訊號退出.19,if-then格式:if (expression) thencommandendifif-then結構把條件放入幾個linux命令,該條件是expression,如果expression得出非零的數值,那麼expression為真,執行if結構內的命令,如果expression得出零值那麼expression為假,就不執行if結構內的命令.if-then結構以if關鍵詞開始,expression表示式用()括起來,關鍵詞then後可以跟任意數量的linux命令,以關鍵詞endif結束if命令.注意:在TCSH中,if (expressiong)和then必須在同一行!舉例:原始碼:ifls#echo -n "Please enter option:"set option=$<if ($option=="s") thenecho List files by sizels -sendif%tcsh iflsPlease enter option: SList files by sizetotal 21 monday 2 today%20,if-then-else格式:if (expressiong) thencommandelsecommandendif使用者需要經常需要根據expression是真還是假來進行選擇.關鍵詞else允許if結構在兩者之間選擇,如果expression為真,那麼執行第一個command,否則,執行第二個就是else後面的command.舉例:原始碼:elsels#echo Enter s to list file sizesecho otherwise all file information is listedecho -n "please enter option:"set option=$<if ($option=="s") thenls -selsels -lendifecho Good-bey(結果略)21,jobs格式:jobs [-l]此命令列出所有活動的任務,如果帶-l選項,將列出程式號,以及正常的資訊.22,kill格式:kill [-signal] %jobpid...kill -l此命令用於終止程式或者任務,如果帶-signal選項,應該指定要傳送的訊號,預設傳送的訊號是SIGTERM,如果帶有-l選項,則列出訊號名,對於帶-l選項提供的訊號數,將列出與其相關的訊號名.23,logout此命令用於終止註冊shell,如果設定了ignoreeof,它將非常有用.24,nice格式:nice [+ number][command]此命令設定shell調整優先為number,如果沒有設定number,調整優先設定為4,帶有指定的command,nice適當的優先執行command,number值越大,程式獲得的CPU的時間就越少.25,nohup格式:nohup [command]如果不帶command引數,nohup指示shell忽略任何停機訊號,如果帶command引數,將執行此命令並忽略執行中的任何停機訊號.26,notify格式:notify [%job...]Linux執行命令後,如果有後臺任務在執行,系統將通知到目前為止已經完成的後臺任務,該系統不會中斷如編輯這樣的操作來通知使用者關於完成的任務,當某任務完成時,如果想馬上知道,無論系統在作什麼,可以使用notify命令指令系統通知使用者,它的引數作為任務號,當任務完成時,系統將中斷當前命令並通知使用者任務已經完成,如:%notify %2當2號任務完成時,告訴系統通知使用者.27,onintr格式 onintr [-|label]此命令控制shell在中斷時的動作,不帶任何引數,將回復shell中斷預設的動作,將終止shell指令碼或返回輸入級的終止符,如果帶-引數,則忽略全部的中斷,當接受中斷或當子程式終止時,帶label的命令將使shell執行goto標號.28.popd格式 popd [-p][-l][-n|-v][+n]此命令從目錄列表中刪除一個目錄,不帶引數的命令從列表中刪除頂層目錄,+n刪除從左起的第n層的目錄.然後popd顯示最終的目錄列表.pushdsilent shell變數可以設定為支援此特性,-p選項可以重寫pushdsilent.29.printenv格式:printenv [name]此命令顯示環境變數的名和值,如果帶name引數,僅僅顯示環境變數name的值.30.pushd格式:pushd [-p][-l][-n|-v][name|+n]此命令把目錄新增到儲存的目錄列表中,然後顯示目錄列表,如不帶引數,除非目錄為空,pushd交換頂層的兩個目錄,並返回0.+n旋轉列表以便使第n個目錄(從左起)列與頂端,但是,如果設定了dextract,pushd +n將展開第n個目錄,把它壓入堆疊頂層.-n旋轉堆疊以便第n個目錄(從右起)列於頂端,dir把dir新增到頂端的目錄列表,是她成為新的當前目錄.如果設定了pushtohome,不帶引數的pushd命令執行pushd ~的功能,像cd的功能一樣,如果dunique被設定,pushd在壓入堆疊之前從堆疊中刪除任何的name歷程,可以設定pushdsilent shell變數來取消目錄列表的顯示,然後可以使用-p選項重寫pushdsilent.31,repeat格式:repeat count command此命令重複執行command指定的次數count.32,set格式:setset name ...set name = value ...set name = (wordlist)...set name[index] = word ...set -rset -r name ...set -r name = value ...set -r name = (wordlist) ...不帶任何引數的set命令將顯示全部的shell變數值,包含許多單詞的變數作為放在括號中的詞列出,帶name引數的set命令定義一個變數併為它賦值null串,帶有name和=符號分隔的值,set定義變數並給它賦值,要把wordlist作為值賦值給name變數,把列表中的詞作為要賦的值放在括號中,為了將數值賦值給陣列元素,,使用方括號[]指定元素的index,但是該元素必須已經存在.-r選項常用於引用只讀變數,僅僅帶-r選項的set命令將列出只讀變數,與變數名一起使用,set將使此變數設定為只讀,與賦值的變數一起使用,將初始化該變數,並使該變數成為不能被修改的只讀變數.在TCSH中,使用者必須在使用變數之前首先宣告它,使用加變數名的set命令宣告變數.變數名可以是任何字母字元包括下劃線_,也可以含有數字,但是變數名不能以數字為首字元!33,setenv格式:setenv [name[value]]setenv常用於定義有特定值的環境變數.如沒有帶value選項,setenv設定name變數為null串,如果沒有帶任何引數,將顯示全部環境變數的名稱和值.TCSH有兩種型別的變數:區域性變數和環境變數.局域變數是在shell內部宣告的;環境變數是全域性域的變數.使用setenv可以定義環境變數,使用setenv命令,變數名,以及被賦值的值,就可給環境變數賦值.其中,沒有賦值運算子,如:%setenv greeting hellogreeting環境變數被賦值為hello無論何時呼叫shell指令碼,都將產生自己的shell,如果shell指令碼被另外一個shell指令碼執行,它將使自己的shell從第一指令碼的shell中分離.現在有兩個shell,屬於第一個指令碼的父shell和當執行第二個指令碼是產生的子shell.在其他的shell內部執行指令碼時,這個shell是第一個指令碼的子shell,原來的指令碼的shell是它的父shell.每個shell都擁有自己的變數,子shell不能引用父shell中的局域變數,但是能引用環境變數.子shell可以引用父shell中宣告的任何環境變數.34,shift格式:shift [variable]沒有引數的shift命令向左移動argv數值,即argv[1]的數值被argv[2]所代替,如果argv沒有被設定或者數值少於一個詞時將發聲錯誤.帶有其數值為列表或陣列的variable,該命令將列表和陣列的數值向左移動.35,source格式:source [-h] name [argument...]source讀出並執行以name命名的命令,通常是shell指令碼(不能把這些命令放在歷史列表中).把任何引數輸入argv中.用-h選項,命令被放入歷史列表但是不立即執行.36.stop格式:stop %job job...stop命令停止指定的任務或在後臺執行的程式.也可以用一個數字或字串引用一個任務,如果不存在預設的任務,那麼僅僅stop不能停止當前的任務.37,switch格式;原始碼:switch (test-string)case pattern:commandsbreakswcase pattern:commandsbreakswdefault:commandsbreakswendswswitch結構在幾個可能的選項中進行選擇.此結構與BASH中的case結構非常類似透過把字串與幾個可能的模式進行選擇,每個可能的模式都與一系列命令相關聯,如果沒有相匹配的項,則執行相關的命令,.switch結構以關鍵詞switch和放在圓括號中的test-string開始,字串常由變數求值匯出,然後是一系列的模式,每個模式pattern前是關鍵詞case,以冒號:結束,冒號後列出與選擇有關的commands,以breaksw終止command,在所有被列出的模式之後,關鍵詞endsw結束switch結構,注意,每個測試表示式的命令組的最後一個命令是breaksw,每個測試表示式被逐一測試,直到找到相匹配的內容,如果沒有找到相匹配的項,則執行預設項default.用關鍵詞default表示預設選擇,default項是可選的.但是它有助於通知使用者沒有匹配的測試字串.舉例:原始碼:lschoice#echo s.List sizesecho l.List files infomationecho c.List C filesecho -n "Please enter choice:"set choice=$<switch ($choice)case s:ls -sbreakswcase l:ls -lbreakswcase c:ls *.cbreakswdefault:echo Invalid Optionbreakswendsw(輸出略)38,time格式:time [command]如果沒有引數,此命令顯示當前shell的時間累計,用一條命令作為引數,它執行命令並顯示時間累計.39,umask格式:umask [value]此命令指定使用者檔案建立掩碼,掩碼用八進位制表示.40,unalias格式:unalias pattern此命令刪除其名稱與pattern匹配的所有別名.41,unset格式:unset pattern此命令取消定義shell變數,名稱可能是匹配了幾個變數的pattern(儘量避免用unset *,因為它將取消所有的變數)42,unsetenv格式:unsetenv pattern此命令取消定義環境變數,名稱可能是匹配幾個變數的pattern,也儘量避免用unsetenv *,因為它將刪除所有的環境變數.43,wait此命令指示shell等待全部的後臺任務的完成,在一個互動的shell環境中,可中斷一個wait操作,並顯示剩餘的任務.44,where格式:where command此命令報告所有已知的命令歷程,包括別名,內建和可執行的路徑.45,which格式:which command此命令顯示shell要執行的指定的任務.46,while格式:while(expression)commandend此迴圈重複執行命令,以關鍵詞while開始,接著是圓括號括起來的表示式expression以end結束迴圈.while迴圈很容易與switch結構結合,構成選單的驅動程式.舉例:原始碼:lschoicesw#set again=yeswhile ($again==yes)echo "1.List sizes"echo "2.List files information"echo "3.List C files"echo "4.Quit"echo -n "Please enter choice:"set choice=$<switch ($choice)case 1:ls -sbreakswcase 2:ls -lbreakswcase 3:ls *.cbreakswcase 4:set again=noecho good-beybreakswdefault:echo Invalid Optionendsw(輸出略)TCSH配置TCSHshell可以使使用者使用shell配置變數和特徵配置自己的shell.也可以使用set命令設定特徵.TCSH也有註冊,注消以及何時進入TCSHshell的配置檔案.一,TCSH shell 特徵TCSH有幾個特徵,允許控制不同的shell操作的方法.TCSH shell特徵不僅包括許多它自己的特徵,而且還包括KSH/BASH shell中的特徵,如,TCSH中有一個noclobber,防止重定向重寫檔案,,一些更常用的特徵為:echo,noclobber,ignoreeof和noglob.透過定義和取消定義與該特性相關的變數,開啟/關閉TCSH shell特徵,為每個特徵命名變數.例如,透過定義noclobber變數,開啟noclobber特徵.使用set命令定義變數,而使用unset命令取消定義變數.為了執行noclobber特徵,使用set noclobber,為了關閉它,使用unset noclobber.如:set variable 定義變數unset variable 取消變數由於這些變數常用於開啟/關閉特徵,所以有時也被叫做雙態切換.1,echo在echo被執行之前,設定echo啟動顯示命令的特徵.set echo 開啟echo特徵unset echo 關閉echo特徵2,ignoreeof設定ignoreeof啟動防止使用者使用CTRL+D注消使用者shell的特徵,它用於防止突發性的注消操作,如果此特徵關閉,可以用CTRL+D注消過程.由於在標準輸入中CTRL+D是結束使用者輸入的操作,所以很容易造成突發注消shell程式.因此,ignoreeof特徵就能防止這種突發的注消,當此特徵被設定後,使用者必須用logout命令明確注消.3,noclobber設定noclobber啟動預防現有檔案不被重定向輸出的特徵,藉助此特徵,如果把輸出重定向到已經存在的檔案中,就不用標準的輸出重寫檔案.原檔案被儲存.也許會發生這種情況:把現有檔名用作儲存被重定向的輸入的檔名.因此,noclobber特徵使使用者不會意外的重寫原檔案.%set noclobber%cat oldfile > newfilenewfile: file exist有時,使用者想用重定向輸出重寫某個檔案,那麼就可在重定向符號運算子之後放置驚歎號!實現重寫操作.這將重寫noclobber特性,用標準的輸出代替檔案內容.%cat oldfile >!newfile4,noglob設定noglob使某特性有效,該特徵禁止使用者shell中的某些字元.字元 * ? [ ] ~將不再擴充套件為匹配的檔名.如:%set noglob%ls myfile?*myfile?*附錄:常用的TCSH shell特徵:特徵 功能set 開啟shell特徵unset 關閉shell特徵echo 執行命令前顯示該命令ignoreeof 禁止用CTRL+D注消noclobber 不必透過重新定向重寫檔案noglob 禁止特殊字元用於檔名擴充套件:* ? ~ [ ]notify 當完成後臺任務時立即通知使用者verbose 歷史命令引用後顯示命令二,TCSH shell 變數正如在BASH shell中一樣,也可在TCSH shell中使用特殊shell變數來匹配自己的系統.一些變數在系統初始化中定義,也可以在shell中用新的值重新定義變數,有些必須在系統初始化時定義,如最常用的特殊變數prompt變數,它允許建立自己的命令列提示符另外一個是history變數,該變數確定儲存了多少歷史命令/事件. 在TCSH shell中,許多特殊變數的名稱與函式都與BASH/ZSH shell中的變數名稱和函式類似.一些必須用大寫表示,但是大多數用小寫表示.某些特殊變數起類似的作用,但是具有完全不同的實現方法,如mail變數儲存的資訊與BASH shell的MAIL,MAILPATH,MAILCHECK變數儲存的資訊完全相同.1,prompt prompt2 prompt3這三個變數為命令列儲存提示符.使用者可以設定自己想要的符號/字串作為提示符.為了設定命令列提示符,可以用%set prompt="+"+這樣提示符就變成了+號.也可以使用預定義的一組程式碼使得配置提示符更容易,在每個程式碼前加個%號,例如,用%/表示當前的工作目錄,%t表示時間,%n表示使用者名稱,%!表示下一個歷史事件的號碼,如:%set prompt="%/"/home/dirname程式碼列表:程式碼 說明%/ 當前執行目錄%h,%!,! 當前歷史號碼%t 當天時間%n 使用者名稱稱%d 日期%w 當前月份%y 當前年份當命令分為若干行輸入時,變數prompt2被用於特殊情況,為需要輸入改命令而增加的行顯示prompt2,prompt3提示符用於檢查拼寫特徵是否被啟用.2,cdpathcdpath變數保持目錄的路徑名,用cd搜尋特定的子目錄,這些路徑名形成一個陣列,就像賦值給TCSH shell的path變數的路徑名陣列一樣,注意在路徑名之間要求有空格.%set cdpath=(/usr/bin /var/bin /home/username)3,history和savehist正如前面瞭解的那樣,history變數常用於確定要儲存的歷史事件的數量,只需給該變數賦值history應該記錄的事件的最大的數值.當達到最大值時,計數器從1開始.但是當注消時,savehist變數儲存儲存在.history檔案中事件的數量,當再次註冊時,這些事件就成為初始化歷史事件.如:%set history=20%set savehist=5當註冊時,歷史列表中將記錄20個事件,但是當注消後,僅僅最後5個事件被儲存在.history檔案中,下一次註冊時,歷史列表將由以前的最後5個命令組成.4,mail在TCSH shell中,mail變數綜合了BASH和ZSH shell中的MAIL,MAILCHECK,MAILPATH變數的特徵.TCSH shell mail變數值是一個陣列,該陣列的元素既包括檢查電子郵件的時間間隔,又包括檢查電子郵箱檔案的路徑.要給這些元素賦值,可以把賦值的陣列賦值給mail變數,用圓括號括起來,空格分割的一系列指定陣列的新值.第一個值是再次檢查電子郵件前設定等待的秒數,它類似BASH shell的MAILCHECK變數儲存的陣列.其餘的值由電子郵箱檔案的路徑構成,檢查該檔案獲取郵件.注意,這些變數儲存了BASH和ZSH shell MAIL,MAILPATH變數的功能. 如:%set mail ( 1200 /usr/mail/user)mail變數被設定成每1200秒檢查一次電子郵件,被檢查的電子郵箱檔案在/usr/mail/user目錄中.%set mail (1200 /usr/mail/user /home/userdir)也可以容易的給mail陣列新增更多的郵箱檔案路徑,注意每個元素之間的空格.附常用的TCSH shell配置變數:變數 說明home 使用者主目錄的路徑名user 註冊名pwd 當前執行目錄的路徑名shell 用於註冊過程的程式路徑名prompt 主提示符path 目錄路徑名列表,搜尋目錄獲取可執行命令mail mail實用程式檢查該變數來獲取接受資訊的郵件檔名cdpath cd命令搜尋該變數獲取子目錄的目錄路徑名history 歷史列表中命令數量savehist 為下一個註冊儲存歷史列表中的命令數量EXINIT EX/vi編輯器的初始化命令TERM 終端名三,TCSH shell初始化檔案TCSH shell有3個初始化檔案: .login .tcshrc .logout,.login檔案是每次註冊時執行的註冊初始化檔案, .tcshrc檔案是每次進入TCSH shell時執行的shell初始化檔案, 該檔案在註冊時執行或者用tcsh命令直接從另一個shell進入TCSH shell時執行,每次注消時執行.logout檔案1, .loginTCSH shell有自己註冊初始化login,該檔案用於配置使用者shell的shell命令和特殊變數定義, .login檔案相當於BASH和ZSH shell中使用的.profile檔案..login檔案包含setenv命令,給TERM之類的特殊環境變數賦值,可以用任何標準的編輯器編輯它,改變這些值,也可新增新的值.但是要記住:在TCSH shell中,為環境變數賦值的命令是setenv,如:%setenv EXINIT 'set nu ai'定義EXINIT變數並設定vi編輯器行計數和自動縮排的功能.當編輯.login檔案時要十分小心,不經意的編輯可能造成錯誤的變數設定或者根本沒有設定變數,因此,編輯之前最好備份.login檔案.如果更改了.login檔案,想讓這些變化在當前註冊期間生效,需要使用source命令重新執行該檔案,source命令實際上可執行任何初始化檔案,其中包括.tcshrc檔案和.logout檔案,如:%source .login2, .tcshrc每當進入TCSH shell或產生任何子shell時,就執行.tcshrc初始化檔案,如果TCSHshell是使用者註冊的shell,那麼當使用者註冊時, .tcshrc檔案和.login檔案一起執行,如果從另外一個shell進入TCSH shell, .tcshrc檔案被自動執行,檔案中包含的變數和別名被定義.實際上,每當產生一個shell時,如執行shell指令碼,就執行.tcshrc檔案,也就是說,每當建立一個shell時,就執行.tcshrc檔案,這允許在.tcshrc中定義區域性變數,在某種意義上說,區域性變數可以進入任何子shell,即時像history這樣的使用者定義的變數也是區域性變數,但要為每個產生的子shell定義特殊變數,這樣,為每個子shell變數設定history,但是,每個子shell都有自己的區域性history變數,使用者甚至可在不影響其他子shell的變數的情況下改變一個子shell的區域性history變數,在shell初始化檔案中定義特殊變數可以看做是BASH shell匯出變數,在BASH shell和ZSH shell中的匯出變數只把自己的複製傳送給子shell,改變複製不會影響原始定義..tchsrc檔案也可包含別名變數和用於開啟shell特徵的特徵變數,別名變數和特徵變數是區域性變數,限定於shell內部.但是.tcshrc檔案在每個shell中都將定義這些變數.因此, .tcshrc檔案通常儲存各種命令定義的別名,如:.tcshrc#set shell=/usr/bin/cshset path=$PATH (/bin /usr/bin .)set cdpath=(/home/dirname/filename /home/dirname/files)set prompt="!$pwd>"set history=20set ignoreeofset noclobberalias rm 'rm -i'alias mv 'mv -i'alias cp 'cp -i'與環境變數不同,區域性變數用set命令定義,在.tcshrc檔案中的區域性變數應該使用set命令定義,用setenv命令定義的環境變數是放在.login檔案中的,請記住:當改變path或cdpath的路徑名時,陣列中包含這些路徑名,陣列中的每個元素要用空格分開,如果新增新的路徑名時,必須保證用空格把它和其他的路徑名分開.如果已經改變了.tcshrc檔案,希望這些變化在當前註冊中立即生效,別忘了用source命令重複執行.tcshrc檔案.3, .logout.logout檔案也是初始化檔案,只不過它在注消時執行,使用者可以設定.logout檔案以使其完成任何在注消時想要完成的操作,檔案中沒有定義變數,常包括關閉程式的shell命令.可以向.logout檔案中新增自己的shell命令,如:.logout#clearecho "Good-bey...
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-944864/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux程式設計入門-crypt(轉)Linux程式設計
- Python程式設計入門(1) (轉)Python程式設計
- Python程式設計入門(3) (轉)Python程式設計
- Python程式設計入門(4) (轉)Python程式設計
- Python程式設計入門(6) (轉)Python程式設計
- Python程式設計入門(7) (轉)Python程式設計
- Python程式設計入門(8) (轉)Python程式設計
- 程式設計“初學者”入門指南 (轉)程式設計
- Linux程式設計入門-gpm(轉)Linux程式設計
- Linux程式設計入門 - crypt(轉)Linux程式設計
- 神經網路程式設計入門【轉】神經網路程式設計
- Linux程式設計入門 - Dialog(轉)Linux程式設計
- Linux程式設計入門 - SVGALIB(轉)Linux程式設計SVG
- 入門程式碼程式設計程式設計
- Linux網路程式設計入門 (轉載)Linux程式設計
- windows網路程式設計經典入門 (轉)Windows程式設計
- Java多執行緒程式設計入門(轉)Java執行緒程式設計
- ADO資料庫程式設計入門(轉)資料庫程式設計
- Linux下的shell程式設計入門(轉)Linux程式設計
- Shell 程式設計入門程式設計
- shell程式設計入門程式設計
- 程式設計和網路程式設計入門程式設計
- 遊戲程式設計入門指南遊戲程式設計
- Number 1 — 程式設計入門程式設計
- Python程式設計入門Python程式設計
- csh shell程式設計入門程式設計
- shell程式設計入門指南程式設計
- 程式設計入門——壘積木學程式設計程式設計
- 遊戲開發新手入門之Windows程式設計(轉)遊戲開發Windows程式設計
- Linux程式設計入門 - socket/inetd programming(轉)Linux程式設計
- Linux程式設計入門 - zlib的運用(轉)Linux程式設計
- Shell程式設計入門:Linux直譯器原理(轉)程式設計Linux
- Linux程式設計入門 fork/pthread/signals(轉)Linux程式設計thread
- JAVA NIO程式設計入門(二)Java程式設計
- Flink DataStream 程式設計入門AST程式設計
- 程式設計入門學什麼?程式設計
- JAVA NIO程式設計入門(一)Java程式設計
- JAVA NIO 程式設計入門(三)Java程式設計