[Cshell]基本語法

如何向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

15repeat

       repeat表示重複執行後面的命令。

repeat 3 "echo helloworld"

16csh中設置環境變量PATH的方法

      csh中使用path代替PATH,設置類似於數組的使用。 

set path = ($path /home)

echo $path  # echo $PATH 

17source等價於其他shell中的內容.

       source使得程序在當前的shell中被執行,而不是派生子進程來執行。

18、轉義字符與單雙引號

      引號必須成對出現,而且必須在同一行上配對。可以用反斜槓來轉義換行符,這樣就能在下一行配對了。

      單引號可用於保護雙引號,雙引號也可以用來保護單引號。

      單引號保護除歷史字符(!)之外的所有元字符不被解釋。

      雙引號保護除歷史字符(!),變量替換字符($)和反引號(用於命令替換)之外的所有元字符,使其不被解釋。

19、歷史command

       history  用來查看command執行的歷史。

       !!           用來執行上一條命令。

20pushdpopd用來維護目錄棧

21csh -vx用來顯示輸入的原樣和變量替換後的腳本,用來幫助調試(csh 調試)

22、在腳本中處理中斷

onintr finish   

  finish:

  onintr - # Disable further interrupts

  echo Cleaning temp files

exit 1

       onintr 命令後跟一個標號名,finish是用戶自定義的標號。如果發生中斷,控制將被轉移到finish標號。通常該行位於腳本的開頭。除非當程序正在執行時按ctrl+C(中斷鍵),此時控制將被轉移到該標號。onintr - 表示屏蔽所有的中斷,此時按下ctrl+C將會被忽略。 

23noclobber 禁止覆蓋變量,設定 $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 秒(選擇性)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章