2017年11月25日 星期六

tcsh

在Linux上常用的Command Line Interface (CLI)的殼層(shell)多是bash, tcsh, tclsh…,因為工作上首次接觸就是tcsh,所以對tcsh認識得較深,雖然查查tcsh使用手冊(manual)就可以知道tcsh要怎麼用,但就在這邊記錄一下所學到的tcsh好用的地方吧!

啟動tcsh

基本上在mac OS上,Linux裡預設都已經有裝了某一版本的tcsh (通常執行檔會放在路徑:/bin/),所以只要打開terminal直接輸入 tcsh就可以執行了。而windows的話基本上是沒有的(畢竟shell script多是UNIX類的作業系統),需要自行下載,可以用軟體mobaxterms來安裝使用。

特點

  1. tcsh是shell script,也是shell env.既然稱為shell + script,就代表tcsh可以先被啟動成一個執行環境再一步一步輸入指令,也可以先寫成腳本再呼叫執行,基本上兩者的執行方式是一樣的。腳本檔的執行基本上是由目前的程序呼叫一個子程序(此子程序就是執行tcsh shell)由上到下一行一行執行腳本指令。
  2. 功能
    1.  流程控制 - 基本 if, while, foreach, goto,  (無for loop)
      1. if ( expression) then
        ...
        [else if then
         ... ]
        [else
         .... ]
        endif

        EX:if ( -e fileA) then  # 若檔案fileA存在,則執行…
          echo "fileA exist"
        endif
        上述這種簡單寫法,可以簡寫成一行,更精簡:
        test -e fileA && echo "fileA exist"
      2. while ( expression )

        end

        EX:set a = 0
        while( $a < 5)  # a = 0,1,2...4
          echo "a = $a"
          @ a++ # a=a+1的意思
        end
        會印出
        a = 0
        a = 1
        a = 2
        a = 3
        a = 4
      3. foreach var1 ( list )
        ...
        end
        EX:
        foreach abc ( a b c )
        echo "name = $abc"
        end
        會印出
        name = a
        name = b
        name = c
      4. goto label
    2. 檔名泛名
      tcsh使用glob pattern而非Regular Expression來對檔名作匹配。
      glob pattern使用'?','*','[]','{}','^'作為特殊字元做匹配。
      '?' - 單一字元
      '*' - 0~多個字元
      '[abc]' - 匹配單一字元:a或b或c
      '{aa,bb,cc}' - 匹配aa或bb或cc
      '^' - 反向選擇:EX: ^ab*  -->匹配檔名開頭非ab的檔案。
    3. 變數與變數取代 (variable substitution)
      1. 種類:變數內容僅能是文字,
      2. 表示法
      3. 特殊變數
        1. $0, $1....
        2. $argv
        3. $#VarName
        4. $$
        5. $?

    4. 指令歷史記錄(command history)及指令取代 (command substitution)
      用。history可顯示之前打過的指令的歷史紀錄
      '!'用來指出在指令歷史記錄中出現過之指令文字。
      1. !!  --執行上個指令
    5. 別名(alias)及別名取代 (alias substitution)
      alias
    6. 路徑堆疊 (directory stack)
      改變當前路徑最常用cd, 而tcsh提供pushd來改變當前路徑並將當前路徑存入stack中,之後可簡單地使用popd來跳回最後存入的路徑。
    7. 排程
      sched指令可以達到排程的目的,例如:sched 
    8. 輸出重新導向與指令執行管線化(piping)




沒有留言:

張貼留言

2020 Pi錢包三倍券加碼回饋機制決策分析

 Pi錢包說 “ 三倍券 ” 中的 2000 元每次消費的都會獲得 p 幣加碼回饋的抽獎機會 試問消費策略?消費越多次越佳或越少次越佳?