在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來安裝使用。
特點
- tcsh是shell script,也是shell env.既然稱為shell + script,就代表tcsh可以先被啟動成一個執行環境再一步一步輸入指令,也可以先寫成腳本再呼叫執行,基本上兩者的執行方式是一樣的。腳本檔的執行基本上是由目前的程序呼叫一個子程序(此子程序就是執行tcsh shell)由上到下一行一行執行腳本指令。
- 功能
- 流程控制 - 基本 if, while, foreach, goto, (無for loop)
- if ( expression) then
...
[else if then
... ]
[else
.... ]
endif
EX:if ( -e fileA) then # 若檔案fileA存在,則執行…
echo "fileA exist"
endif
上述這種簡單寫法,可以簡寫成一行,更精簡:
test -e fileA && echo "fileA exist"
- 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
- foreach var1 ( list )
...
end
EX:
foreach abc ( a b c )
echo "name = $abc"
end
會印出
name = a
name = b
name = c
- goto label
- 檔名泛名
tcsh使用glob pattern而非Regular Expression來對檔名作匹配。
glob pattern使用'?','*','[]','{}','^'作為特殊字元做匹配。
'?' - 單一字元
'*' - 0~多個字元
'[abc]' - 匹配單一字元:a或b或c
'{aa,bb,cc}' - 匹配aa或bb或cc
'^' - 反向選擇:EX: ^ab* -->匹配檔名開頭非ab的檔案。
- 變數與變數取代 (variable substitution)
- 種類:變數內容僅能是文字,
- 表示法
- 特殊變數
- $0, $1....
- $argv
- $#VarName
- $$
- $?
- 指令歷史記錄(command history)及指令取代 (command substitution)
用。history可顯示之前打過的指令的歷史紀錄
'!'用來指出在指令歷史記錄中出現過之指令文字。
- !! --執行上個指令
- 別名(alias)及別名取代 (alias substitution)
alias
- 路徑堆疊 (directory stack)
改變當前路徑最常用cd, 而tcsh提供pushd來改變當前路徑並將當前路徑存入stack中,之後可簡單地使用popd來跳回最後存入的路徑。
- 排程
sched指令可以達到排程的目的,例如:sched
- 輸出重新導向與指令執行管線化(piping)
沒有留言:
張貼留言