你很可能正在使用bash,也可能是csh。你可能聽說過sh、tcsh。如果你安裝過EDA,就知道某EDA要正常工作必須要裝ksh。另外你可能還聽某大神安利過zsh……
一圖看懂各種shell的聯(lián)系與區(qū)別
那這么多shell有什么聯(lián)系和區(qū)別,我們先來看看它們的歷史和關系。下圖基于維基百科資料整理:
ICer該如何選擇shell
那么這么多shell,我們ICer該如何選擇呢?看以下幾條信息:
在現(xiàn)代化的操作系統(tǒng)中,比如Solaris11、RHEL7、Mac OS X默認都是bash。
IC企業(yè)里用tcsh的居多,因為大家原先都在Solaris里干活,老版本的Solaris默認是csh。
在RHEL6、7里,sh軟鏈接指向bash,csh軟鏈接指向tcsh。
zsh很流行,顏色很好看,自動化功能很強大,特別是Oh My Zsh的擴展使用zsh成為了終極shell。可惜的是,很多芯片設計公司服務器沒有安裝,周圍也沒有同事用。
EDA安裝目錄里有ksh腳本,說明有一些IC企業(yè)在用ksh,但國內用的人極少。
基于以上的分析,對于普通ICer,我們的結論是:
如果你是普通搬磚的ICer,有啥用啥,周圍同事用啥你也用啥。所以bash和tcsh都得學。
如果你是公司的領導(Leader、經理、中層管理等),你讓手下用啥,手下就用啥。需要考慮生產力,傳統(tǒng),學習培訓成本。
在家,你愛用啥用啥,看著舒服,用著順手就行。
另外,由于Tcl、Perl、Python等腳本語言的強大,我們只需要了解和掌握shell的常見、簡單用法即可。把復雜的編程交給Tcl/Perl/Python去做吧。
shell簡易教程
注釋
1#thisiscomment
用戶配置文件
1#bash 2~/.bashrc 3 4#tcsh 5~/.tcshrc或~/.cshrc 6 7#zsh 8~/.zshrc
腳本第一行指定解釋器
1#!/bin/bash 2#!/bin/tcsh 3#!/bin/zsh
變量定義,賦值,引用
1#bash 2CompanyInfo="AIChips,Co.LTD" 3EDA_HOME=/tools/eda 4echo$EDA_HOME 5my_array=(1234) 6echo${my_array[0]}#outputis1 7my_hash['first']=1 8my_hash[second]=2 9echo${my_hash[first]} 10 11#tcsh 12CompanyInfo="AIChips,Co.LTD" 13setEDA_HOME=/tools/eda 14echo$EDA_HOME 15setmy_array=(1234) 16echo$my_array[1]#outputis1 17 18#zsh 19CompanyInfo="AIChips,Co.LTD" 20EDA_HOME=/tools/eda 21echo$EDA_HOME 22my_array=(1234) 23echo$my_array[1]#outputis1 24decare-Amy_hash 25my_hash['first']=1 26my_hash[second]=2 27echo$my_hash[first]
Tips:
#1 bash數(shù)組下標從0開始,tcsh和zsh從1開始。
#2 bash引用關聯(lián)數(shù)組用${my_hash[first]},tcsh和zsh不需要{},直接$my_hash[first]。
環(huán)境變量
1#bash,zsh 2exportNOVAS_HOME=/tools/eda/synopsys/novas 3或者 4NOVAS_HOME=/tools/eda/synopsys/novas 5exportNOVAS_HOME 6 7#tcsh 8setenvNOVAS_HOME/tools/eda/synopsys/novas
Tips:
#1 tcsh的path數(shù)組只對當前shell有效。但如果寫在用戶配置文件~/.tcshrc里,path也是對所有shell有效的。
條件
1#bash,zsh 2foo="a" 3if[$foo="a"];then 4echo"equal" 5fi 6 7#csh 8setfoo="a" 9if($foo=="a")then 10echo"equal" 11endif
Tips:
#1 考慮兼容性,bash、zsh中的字符串比較用=,而tcsh里用==
#2 bash、zsh的[ ]內部必須有空格
循環(huán)
1#bash 2arr=("a""b""c") 3for((i=0;i<${#arr[*]};?i++)) 4do? 5??echo?${arr[$i]} 6done 7 8#tcsh 9set?arr?=?(a?b?c) 10foreach?i?($arr) 11??echo?$i 12end 13 14#zsh 15arr=("a"?"b"?"c") 16echo?$arr 17for?((i=1;?i?<=?$#arr;?i++))?{ 18??echo?$arr[$i] 19} 20for?i?($arr)?{ 21??echo?$i 22}
Tips:
#1 數(shù)組長度的表示方式不同,bash里用${#arr[*]}或者${#arr[@]},tcsh和zsh用$#arr
#2 bash用for var in {0..9},tcsh用foreach var ($array),zsh用for var ($array)
函數(shù)
1#bash,zsh 2functionsum(){ 3return$(($1+$2)) 4} 5sum12 6echo"sum=$?"
Tips:
#1 函數(shù)必須先定義后使用
#2 函數(shù)傳入參數(shù)時,在函數(shù)內部用$1, $2, $3等取得
#3 return的返回值保存在內置變量$?里
#4 函數(shù)調用時,參數(shù)直接寫在函數(shù)名后面,與linux命令的格式相同
#5 tcsh不支持函數(shù)的語法,可以用alias實現(xiàn)類似函數(shù)的功能
下面是tcsh里用alias實現(xiàn)類似求和函數(shù)sum的例子。alias只是起到簡化代碼的作用,相當于宏定義。
1#tcsh 2aliassum'@sum=$a+$b';echo$sum 3seta=1 4setb=2 5sum#outputis3 6setb=10 7sum#outputis11
審核編輯:劉清
-
IC設計
+關注
關注
38文章
1302瀏覽量
104286 -
Linux
+關注
關注
87文章
11345瀏覽量
210392 -
Shell
+關注
關注
1文章
366瀏覽量
23445 -
Bash
+關注
關注
0文章
57瀏覽量
10206
原文標題:IC設計中Linux shell的選擇和使用(bash、tcsh、zsh)
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論