歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> 不是SHELL的SHELL—TCSH SHELL 編程

不是SHELL的SHELL—TCSH SHELL 編程

日期:2017/2/27 9:26:24   编辑:SHELL編程
  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 $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  %    三,操作符TCSH有一系列標准的賦值,算術和關系運算以及重定向和後台操作等函數賦值運算符 功能說明  = 賦值操作  += 先加再賦值  -= 先減再賦值  *= 先乘再賦值  /= 先除再賦值  %= 取余再賦值  ++ 自增量1  -- 自減量1  算術運算符 說明  - 負號  + 加法  - 減法  * 乘法  / 除法  % 取余  關系運算符 說明  > 大於  < 小於  >= 大於等於  <= 小於等於  != 不等於  == 等於  重定向和管道符TCSH支持標准輸入和標准輸出的重定向和管道操作.如果設置了noclobber特征,要用重定向操作重寫當前文件,需要用符號>!代替>    四,控制結構同其他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的結構不可重定向或進行管道輸出.    五,測試表達式;()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 測試文件是否為空  邏輯運算符: 功能  && 與運算,兩個條件同時蠻族   或運算,有一個條件滿足  ! 取反    六,TCSH內建命令  1,數字變量:@  在TCSH中,用@命令代替set命令來聲明數字變量,然後進行算術,關系和位操作,數字和字符串變量是兩個不同的對象,需要用不同的方法管理,不能把set用於數值變量的設置@命令由關鍵詞,變量名,賦值運算符和表達式構成.如:  %@ num=10 #注意空格  %@ sum=2 * ($num + 3)  %echo $sum  %26    2,alias  格式:alias [name[command]]  關鍵詞alias 別名name 引用的命令command  如:  alias list ls  alias 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 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或$# 命令行參數的計數    4,bg  格式:bg [%job]  bg命令把指定的任務放入後台.如果此任務已經停止,則繼續執行,如果沒有參數,將當前任務放入後台.(詳細用法與BASH相同此處略)    5,break  格式:break  break命令用於退出最接近的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...  此命令把參數作




Copyright © Linux教程網 All Rights Reserved