摘要:TCSH shell不一樣於其餘的shell,由於控制結構更符合程序設計語言的格式。例如TCSH 的test條件的控制結構是表達式,而不是linux命令,獲得的值是邏輯值true或false,TCSH的表達式與C語言中的表達式基本相同。linux
第一篇 TCSH shell簡介正則表達式
TCSH shell不一樣於其餘的shell,由於控制結構更符合程序設計語言的格式。例如TCSH 的test條件的控制結構是表達式,而不是linux命令,獲得的值是邏輯值true或false,TCSH的表達式與C語言中的表達式基本相同。shell
1、TCSH shell變量、腳本和參數express
用戶能夠在shell中定義變量,爲變量賦值以及引用腳本參數。TCSH使用set,@,setenv定義一變量,也能夠用相同的方法定義數值變量和數組,用戶經過@命令定義的數值變量來進行算術運算,用戶使用圓括號()和方括號[]定義和引用數組。腳本也能夠用相同的方法操做,可是有個例外,儘管能夠用echo命令輸出提示符,但沒有read命令處理輸入,相反,必須重定向到一個變量裏。編程
2、腳本輸入和腳本輸出: $ <數組
用戶可以在腳本範圍中定義和使用變量。在下例中,使用文本編輯器把賦值操做和echo之類的linux命令放在一個文件中。而後能夠產生可執行文件並像其餘命令同樣在命令行中執行它,要記住添加可執行權限,必須使用帶u+x參數的chmod命令或者帶絕對參數700的chmod命令。本中,可使用echo命令去輸出數據,可是,必須經過重定向標準輸入把輸入讀入變量。在TCSH中沒有linux read命令的比較版本。記住TCSH所有的腳本文件的第一行的第一個字符必須是「#」字符。cookie
好比:app
#編程語言
#display "hello"編輯器
set string="hello"
echo The value of string is $string
set命令和重定向符號結合$<將用戶輸入的任何數據讀入標準的輸入中,下例中,把用戶輸入讀入string變量中。
%set string=$<
abc
%echo $string
abc
可以把提示符放置到相同的行用做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
%hello
please enter a string:hello
the value of string is hello
%
3、操做符
TCSH有一系列標準的賦值,算術和關係運算以及重定向和後臺操做等函數。
賦值運算符 功能說明
= 賦值操做
+= 先加再賦值
-= 先減再賦值
*= 先乘再賦值
/= 先除再賦值
%= 取餘再賦值
++ 自增量1
-- 自減量1
算術運算符 說明
- 負號
+ 加法
- 減法
* 乘法
/ 除法
% 取餘
關係運算符 說明
> 大於
< 小於
>= 大於等於
<= 小於等於
!= 不等於
== 等於
重定向和管道符
TCSH支持標準輸入和標準輸出的重定向和管道操做.若是設置了noclobber特徵,要用重定向操做重寫當前文件,須要用符號>!代替>
4、控制結構
同其餘shell同樣,TCSH也有一系列的控制結構控制腳本的命令的執行。while和if控制結構是最經常使用的控制結構,switch和foreach是更專用的控制結構。switch是if條件的限定形式,檢查數值是否等於一系列可能的數值中的一個數值。foreach是循環結構的限定形式.瀏覽數值列表,給變量賦新的數值。
TCSH不一樣的控制結構列表:
一、條件控制結構;功能
if (expression) then 注:若是expression爲真,則執行commands
commands
endif
if (expression) then 注:若是expression爲真,則執行command1,不然執行
command1 command2.
else
command2
endif
switch (string) 加註:容許在幾條替換命令中選擇,string爲不一樣的模式
case pattern:
commands
breadsw
default:
commands
endsw
二、循環控制結構: 功能
while (expression) 只要expression爲真,則重複執行commands,
commands 直到expression爲假時跳出循環
end
foreach variable (argument-list)迭代循環得到和argument-list中同樣多的參數commands (每次循環variable被設置爲列表的下一個參數;end 操做方式同BSH)
TCSH中的控制結構有別於其餘的shell,由於它更接近編程語言(C).TCSH的條件表達式的值爲true/false.BASH和TCSH主要區別在於TCSH的結構不可重定向或進行管道輸出.
5、測試表達式;()
if和while控制結構把表達式用做測試.表達式測試的結果爲非零(1)表示真,而零(0)表示假(跟BASH相反).測試表達式可由算術/字符串比較,可是字符串只能做相等和不相等的比較.並且表達式必需要在()括號內.
如:
if (expression) then
command
endif
TCSH有一系列的運算符來分別對字符串進行測試比較.正則表達式能夠包含shell腳本的指令的字符串;
如:
if ( $var =~[Hh]* ) then #若是變量$var以字母是大寫/小寫Hh開頭,的字符串
echo information #執行命令
endif #結束
有不少測試文件的操做與BASH徹底相同;如:
if ( -r myfile ) then #測試myfile是否可讀
echo info
endif
測試表達式的基本操做:
一、字符串比較: 功能
== 是否相等,若相等返回真
!= 是否不等,若不等返回真
=~ 字符串和模式進行測試是否相等(模式爲任意正則表達式)
!~ 字符串和模式測試是否不等(模式爲任意正則表達式)
文件測試: 功能
-e 測試文件是否存在
-r 測試文件是否可讀
-w 測試文件是否可寫
-x 測試文件是否可執行
-d 測試文件名是否爲目錄
-f 測試文件是否爲普通文件
-o 測試文件是否被用戶所擁有
-z 測試文件是否爲空
二、邏輯運算符: 功能
&& 與運算,兩個條件同時蠻族
|| 或運算,有一個條件知足
! 取反
6、TCSH內建命令
一、數字變量@
在TCSH中,用@命令代替set命令來聲明數字變量,而後進行算術,關係和位操做,數字和字符串變量是兩個不一樣的對象,須要用不一樣的方法管理,不能把set用於數值變量的設置@命令由關鍵詞,變量名,賦值運算符和表達式構成。如:
%@ num=10 #注意空格
%@ sum=2 * ($num + 3)
%echo $sum
%26
二、alias
格式:alias [name[command]]
關鍵詞
alias 別名name 引用的命令command
如:
alias list ls
alias list 'ls -l'
三、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 c
The number of arguments entered is 3
The list of arguments is : a b c
argv變量列表:
命令行參數 說明
$argv[0]或$0 命令名
$argv[n]或$n 從1($1-$)開始的第n個命令行參數
$argv[*]或$* 從1開始的全部命令行參數
$#argv或$# 命令行參數的計數
四、bg
格式:bg [%job]
bg命令把指定的任務放入後臺。若是此任務已經中止,則繼續執行,若是沒有參數,將當前任務放入後臺。(詳細用法與BASH相同此處略)
五、break
格式:
break
break命令用於退出最接近的foreach/while循環過程,執行同一行中其餘的命令。
六、breaksw
格式:breaksw
能夠從switch語句處中斷,在endsw後繼續執行。
七、builtins
列出所有shell的內建命令表.
八、cd
格式:cd [-p][-l][-nl -v][name]
若是給出目錄名,此命令把name設置爲當前目錄,若是命令中沒有name,當前目錄自動設置成用戶主目錄。用於name的"-"引用上一級目錄,若是參數name沒有給出子目錄,或不是全路徑,或使用./或../引用當前目錄及父目錄,那麼就檢查在cdpath shell變量中列出的目錄來尋找該目錄名。若是此操做失敗,將檢查shell變量中是否保存着的目錄路徑名。
用-p選項,linux顯示目錄列表, 用-l,-n,-v選項與用在dirs命令中的選項徹底相同。
默認選項-p ;
九、continue
此命令繼續執行最靠近while/foreach語句,當前行其他的命令被執行。
十、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設置.
十一、echo
格式:
echo [-n] word/string
此命令把每一個單詞或字符串寫入shell的標準輸出.可設置echostyle shell變量來仿真選項以及BSD的換碼序列或者echo的System V 版本;
十二、eval
格式:
eval argument...
此命令把參數做爲shell的輸入,執行當前shell的上下文中的結果命令,因爲分析發聲在替換前,因此該命令一般用於執行命令或變量替代所產生的命令。
1三、exec
格式:exec command
此命令代替當前的shell執行指定的命令,並退出終端;
1四、exit
格式: exit [expression]
shell能夠帶指定的表達式的值退出,若是沒有包含表達式,也可帶狀態變量值退出。
1五、fg
格式:fg [%job...]
把指定的任務帶到前臺,若是任務在終止狀態,在帶到前臺的同時使他運行;job參數是使用任務號或者下列字符串之一的任務引用:' % + -
1六、foreach
格式:
foreach variable(list of values)
commands
end
foreach結構被設置爲順序引用數值列表,它相似BASH shell的for in 結構.foreach結構產生兩個操做數:一個變量和一組包含在()中的數值列表.將列表中的值賦值到結構中的變量中.循環體的結尾由語句end構成.下例中腳本list輸出由項目和foreach循環讀取每一項當前的日期構成的一行信息,列表中的每一項被連續賦值到變量object list
#
set tdate=`date +%D`
foreach object(milk cookies apples cheese)
echo $object $tdate
end
%tcsh list
milk 04/26/03
cookies 04/26/03
apples 04/26/03
cheese 04/26/03
使用foreach循環有助於管理文件,能夠模式中的shell特定字符來產生用做數值列表的文件名列表,而後所產生的文件名列表就成爲foreach結構引用的列表.若是在列表中不帶任何變量,可使用命令行參數實現循環.
list
#set tdate=`date +D%`
foreach object($argv[*])
echo "$object $tdate"
end
%tcsh list a b c
a 04/26/03
b 04/26/03
c 04/26/03
使用argv[*]特殊參數變量,能夠直接引用命令行參數。下例中,當調用shell腳本cbackuparg時,在命令行下輸入C程序文件的列表,在foreach循環中,argv[*]引用命令行中的全部參數,將按順序把各個參數賦值給變量backfile,變量argnum用於引用每一個參數。顯示參數和backfile的值來講明它們兩個是相同的。
cbackuparg
#
@ argnum=1
foreach backfile ($argv[*])
cp $backfile sourcebak/$backfile
echo "$backfile $argv[$argnum]"
@ argnum=$argnum+1
end
%cbackuparg main.c lib.c io.c
main.c main.c
lib.c lib.c
io.c io.c
1七、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。
1八、hup
格式:
hup [command]
若是帶有括起來的command參數,hup運行command,根據停機信號退出。當shell退出時,hup安排shell發出停機信號。注意:命令也許設置本身的停機響應,重寫hup,若是沒有參數(只有在shell腳本中才容許),hup使shell根據腳本的餘項的停機信號退出。
1九、if-then
格式:
if (expression) then
command
endif
if-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") then
echo List files by size
ls -s
endif
%tcsh ifls
Please enter option: S
List files by size
total 2
1 monday 2 today
%
20、if-then-else
格式:
if (expressiong) then
command
else
command
endif
用戶須要常常須要根據expression是真仍是假來進行選擇;關鍵詞else容許if結構在二者之間選擇;若是expression爲真,那麼執行第一個command,不然執行第二個就是else後面的command。
舉例:
elsels
#
echo Enter s to list file sizes
echo otherwise all file information is listed
echo -n "please enter option:"
set option=$<
if ($option=="s") then
ls -s
else
ls -l
endif
echo Good-bey
(結果略)
2一、jobs
格式:
jobs [-l]
此命令列出全部活動的任務,若是帶-l選項,將列出進程號,以及正常的信息.
2二、kill
格式:
kill [-signal] %job\pid...
kill -l
此命令用於終止進程或者任務,若是帶-signal選項,應該指定要發送的信號,默認發送的信號是SIGTERM,若是帶有-l選項,則列出信號名,對於帶-l選項提供的信號數,將列出與其相關的信號名。
2三、logout
此命令用於終止註冊shell,若是設置了ignoreeof,它將很是有用;
2四、nice
格式:
nice [+ number][command]
此命令設置shell調整優先爲number,若是沒有設置number,調整優先設置爲4,帶有指定的command,nice適當的優先運行command,number值越大,進程得到的CPU的時間就越少.
2五、nohup
格式:
nohup [command]
若是不帶command參數,nohup指示shell忽略任何停機信號,若是帶command參數,將執行此命令並忽略執行中的任何停機信號.
2六、notify
格式:
notify [%job...]
Linux執行命令後,若是有後臺任務在執行,系統將通知到目前爲止已經完成的後臺任務,該系統不會中斷如編輯這樣的操做來通知用戶關於完成的任務,當某任務完成時,若是想立刻知道,不管系統在做什麼,可使用notify命令指令系統通知用戶,它的參數做爲任務號,當任務完成時,系統將中斷當前命令並通知用戶任務已經完成,如:
%notify %2
當2號任務完成時,告訴系統通知用戶.
2七、onintr
格式:
onintr [-|label]
此命令控制shell在中斷時的動做,不帶任何參數,將回復shell中斷默認的動做,將終止shell腳本或返回輸入級的終止符,若是帶-參數,則忽略所有的中斷,當接受中斷或當子進程終止時,帶label的命令將使shell執行goto標號.
2八、popd
格式:
popd [-p][-l][-n|-v][+n]
此命令從目錄列表中刪除一個目錄,不帶參數的命令從列表中刪除頂層目錄,+n刪除從左起的第n層的目錄.而後popd顯示最終的目錄列表.pushdsilent shell變量能夠設置爲支持此特性,-p選項能夠重寫pushdsilent.
2九、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.
3一、repeat
格式:
repeat count command
此命令重複執行command指定的次數count.
3二、set
格式:
set
set name ...
set name = value ...
set name = (wordlist)...
set name[index] = word ...
set -r
set -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命令聲明變量.變量名能夠是任何字母字符包括下劃線_,也能夠含有數字,可是變量名不能以數字爲首字符!
3三、setenv
格式:
setenv [name[value]]
setenv經常使用於定義有特定值的環境變量.如沒有帶value選項,setenv設置name變量爲null串,若是沒有帶任何參數,將顯示所有環境變量的名稱和值.
TCSH有兩種類型的變量:局部變量和環境變量.局域變量是在shell內部聲明的;環境變量是全局域的變量.使用setenv能夠定義環境變量,使用setenv命令,變量名,以及被賦值的值,就可給環境變量賦值.其中,沒有賦值運算符,如:
%setenv greeting hello
greeting環境變量被賦值爲hello,不管什麼時候調用shell腳本,都將產生本身的shell,若是shell腳本被另一個shell腳本
執行,它將使本身的shell從第一腳本的shell中分離.如今有兩個shell,屬於第一個腳本的父shell和當執行第二個腳本是產生的子shell.
在其餘的shell內部執行腳本時,這個shell是第一個腳本的子shell,原來的腳本的shell是它的父shell.每一個shell都擁有本身的變量,子shell不能引用父shell中的局域變量,可是能引用環境變量.子shell能夠引用父shell中聲明的任何環境變量.
3四、shift
格式:
shift [variable]
沒有參數的shift命令向左移動argv數值,即argv[1]的數值被argv[2]所代替,若是argv沒有被設置或者數值少於一個詞時將發聲錯誤.帶有其數值爲列表或數組的variable,該命令將列表和數組的數值向左移動.
3五、source
格式:
source [-h] name [argument...]
source讀出並執行以name命名的命令,一般是shell腳本(不能把這些命令放在歷史列表中).把任何參數輸入argv中.用-h選項,命令被放入歷史列表可是不當即執行.
3六、stop
格式:
stop %job\ job...
stop命令中止指定的任務或在後臺執行的進程.也能夠用一個數字或字符串引用一個任務,若是不存在默認的任務,那麼僅僅stop不能中止當前的任務.
3七、switch
格式:
switch (test-string)
case pattern:
commands
breaksw
case pattern:
commands
breaksw
default:
commands
breaksw
endsw
switch結構在幾個可能的選項中進行選擇.此結構與BASH中的case結構很是相似經過把字符串與幾個可能的模式進行選擇,每一個可能的模式都與一系列命令相關聯,若是沒有相匹配的項,則執行相關的命令。
switch結構以關鍵詞switch和放在圓括號中的test-string開始,字符串常由變量求值導出,而後是一系列的模式,每一個模式pattern前是關鍵詞case,以冒號:結束,冒號後列出與選擇有關的commands,以breaksw終止command,在全部被列出的模式以後,關鍵詞endsw結束switch結構。
注意:每一個測試表達式的命令組的最後一個命令是breaksw,每一個測試表達式被逐一測試,直到找到相匹配的內容,若是沒有找到相匹配的項,則執行默認項default。用關鍵詞default表示默認選擇,default項是可選的。可是它有助於通知用戶沒有匹配的測試字符串。
舉例:
lschoice
#
echo s.List sizes
echo l.List files infomation
echo c.List C files
echo -n "Please enter choice:"
set choice=$<
switch ($choice)
case s:
ls -s
breaksw
case l:
ls -l
breaksw
case c:
ls *.c
breaksw
default:
echo Invalid Option
breaksw
endsw
(輸出略)
3八、time
格式:
time [command]
若是沒有參數,此命令顯示當前shell的時間累計,用一條命令做爲參數,它執行命令
並顯示時間累計.
3九、umask
格式:
umask [value]
此命令指定用戶文件創建掩碼,掩碼用八進制表示.
40、unalias
格式:
unalias pattern
此命令刪除其名稱與pattern匹配的全部別名.
4一、unset
格式:unset pattern
此命令取消定義shell變量,名稱多是匹配了幾個變量的pattern(儘可能避免用unset *,由於它將取消全部的變量)
4二、unsetenv
格式:
unsetenv pattern
此命令取消定義環境變量,名稱多是匹配幾個變量的pattern,也儘可能避免用unsetenv *,由於它將刪除全部的環境變量.
4三、wait
此命令指示shell等待所有的後臺任務的完成,在一個交互的shell環境中,可中斷一個wait操做,並顯示剩餘的任務.
4四、where
格式:where command
此命令報告全部已知的命令歷程,包括別名,內建和可執行的路徑.
4五、which
格式:
which command
此命令顯示shell要執行的指定的任務.
4六、while
格式:
while(expression)
command
end
此循環重複執行命令,以關鍵詞while開始,接着是圓括號括起來的表達式expression以end結束循環。
while循環很容易與switch結構結合,構成菜單的驅動程序;
lschoicesw
#
set again=yes
while ($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 -s
breaksw
case 2:
ls -l
breaksw
case 3:
ls *.c
breaksw
case 4:
set again=no
echo good-bey
breaksw
default:
echo Invalid Option
endsw
(輸出略)
第二篇 TCSH配置
TCSHshell可使用戶使用shell配置變量和特徵配置本身的shell.也可使用set命令設置特徵.TCSH也有註冊,注消以及什麼時候進入TCSHshell的配置文件.
1、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 取消變量
因爲這些變量經常使用於打開/關閉特徵,因此有時也被叫作雙態切換.
一、echo
在echo被執行以前,設置echo啓動顯示命令的特徵;
set echo 打開echo特徵
unset echo 關閉echo特徵
二、ignoreeof
設置ignoreeof啓動防止用戶使用CTRL+D注消用戶shell的特徵,它用於防止突發性的注消操做,若是此特徵關閉,能夠用CTRL+D注消過程.因爲在標準輸入中CTRL+D是結束用戶輸入的操做,因此很容易形成突發注消shell進程.所以,ignoreeof特徵就能防止這種突發的注消,當此特徵被設置後,用戶必須用logout命令明確注消.
三、noclobber
設置noclobber啓動預防現有文件不被重定向輸出的特徵,藉助此特徵,若是把輸出重定向到已經存在的文件中,就不用標準的輸出重寫文件.原文件被保存.也許會發生這種狀況:把現有文件名用做保存被重定向的輸入的文件名.所以,noclobber特徵使用戶不會意外的重寫原文件.
%set noclobber
%cat oldfile > newfile
newfile: file exist
有時,用戶想用重定向輸出重寫某個文件,那麼就可在重定向符號操做符以後放置驚歎號!實現重寫操做.這將重寫noclobber特性,用標準的輸出代替文件內容.
%cat oldfile >!newfile
四、noglob
設置noglob使某特性有效,該特徵禁止用戶shell中的某些字符.字符 * ? [ ] ~將再也不擴展爲匹配的文件名.如:
%set noglob
%ls myfile?*
myfile?*
五、附錄:經常使用的TCSH shell特徵;
特徵 功能
set 打開shell特徵
unset 關閉shell特徵
echo 執行命令前顯示該命令
ignoreeof 禁止用CTRL+D注消
noclobber 沒必要經過從新定向重寫文件
noglob 禁止特殊字符用於文件名擴展:* ? ~ [ ]
notify 當完成後臺任務時當即通知用戶
verbose 歷史命令引用後顯示命令
2、TCSH shell 變量
正如在BASH shell中同樣,也可在TCSH shell中使用特殊shell變量來匹配本身的系統.一些變量在系統初始化中定義,也能夠在shell中用新的值從新定義變量,有些必須在系統初始化時定義,如最經常使用的特殊變量prompt變量,它容許創建本身的命令行提示符另一個是history變量,該變量肯定保存了多少歷史命令/事件.
在TCSH shell中,許多特殊變量的名稱與函數都與BASH/ZSH shell中的變量名稱和函數相似.一些必須用大寫表示,可是大多數用小寫表示.某些特殊變量起相似的做用,可是具備徹底不一樣的實現方法,如mail變量保存的信息與BASH shell的MAIL,MAILPATH,MAILCHECK變量保存的信息徹底相同.
一、prompt prompt2 prompt3
這三個變量爲命令行保存提示符.用戶能夠設置本身想要的符號/字符串做爲提示符.爲了設置命令行提示符,能夠用
%set prompt="+"
+
這樣提示符就變成了+號.也可使用預約義的一組代碼使得配置提示符更容易,在每一個代碼前加個%號,例如,用%/表示當前的工做目錄,%t表示時間,%n表示用戶名,%!表示下一個歷史事件的號碼,如:
%set prompt="%/"
/home/dirname
代碼列表:
代碼 說明
%/ 當前運行目錄
%h,%!,! 當前歷史號碼
%t 當天時間
%n 用戶名稱
%d 日期
%w 當前月份
%y 當前年份
當命令分爲若干行輸入時,變量prompt2被用於特殊狀況,爲須要輸入改命令而增長的行顯示prompt2,prompt3提示符用於檢查拼寫特徵是否被激活.
二、cdpath
cdpath變量保持目錄的路徑名,用cd搜索特定的子目錄,這些路徑名造成一個數組,就像賦值給TCSH shell的path變量的路徑名數組同樣,注意在路徑名之間要求有空格.
%set cdpath=(/usr/bin /var/bin /home/username)
三、history和savehist
正如前面瞭解的那樣,history變量經常使用於肯定要保存的歷史事件的數量,只需給該變量賦值history應該記錄的事件的最大的數值.當達到最大值時,計數器從1開始.可是當注消時,savehist變量保存存儲在.history文件中事件的數量,當再次註冊時,這些事件
就成爲初始化歷史事件.如:
%set history=20
%set savehist=5
當註冊時,歷史列表中將記錄20個事件,可是當注消後,僅僅最後5個事件被保存在.history文件中,下一次註冊時,歷史列表將由之前的最後5個命令組成.
四、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 終端名
3、TCSH shell初始化文件
TCSH shell有3個初始化文件: .login .tcshrc .logout,.login文件是每次註冊時執行的註冊初始化文件, .tcshrc文件是每次進入TCSH shell時執行的shell初始化文件, 該文件在註冊時執行或者用tcsh命令直接從另外一個shell進入TCSH shell時
執行,每次注消時執行.logout文件
一、 .login
TCSH 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 .login
二、 .tcshrc
每當進入TCSH shell或產生任何子shell時,就執行.tcshrc初始化文件,若是TCSH shell是用戶註冊的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/csh
set path=$PATH (/bin /usr/bin .)
set cdpath=(/home/dirname/filename /home/dirname/files)
set prompt="!$pwd>"
set history=20
set ignoreeof
set noclobber
alias rm 'rm -i'
alias mv 'mv -i'
alias cp 'cp -i'
與環境變量不一樣,局部變量用set命令定義,在.tcshrc文件中的局部變量應該使用set命令定義,用setenv命令定義的環境變量是放在.login文件中的,請記住:當改變path或cdpath的路徑名時,數組中包含這些路徑名,數組中的每一個元素要用空格分開,若是添加新的路徑名時,必須保證用空格把它和其餘的路徑名分開.若是已經改變了.tcshrc文件,但願這些變化在當前註冊中當即生效,別忘了用source命令重複執行.tcshrc文件。
三、 .logout
.logout文件也是初始化文件,只不過它在注消時執行,用戶能夠設置.logout文件以使其完成任何在注消時想要完成的操做,文件中沒有定義變量,常包括關閉進程的shell命令.能夠向.logout文件中添加本身的shell命令,如:
.logout
#
clear
echo "Good-bey..."