你很可能正在使用bash,也可能是csh。你可能聽說(shuō)過(guò)sh、tcsh。如果你安裝過(guò)EDA,就知道某EDA要正常工作必須要裝ksh。另外你可能還聽某大神安利過(guò)zsh……
一圖看懂各種shell的聯(lián)系與區(qū)別
那這么多shell有什么聯(lián)系和區(qū)別,我們先來(lái)看看它們的歷史和關(guān)系。下圖基于維基百科資料整理:
ICer該如何選擇shell
那么這么多shell,我們ICer該如何選擇呢?看以下幾條信息:
在現(xiàn)代化的操作系統(tǒng)中,比如Solaris11、RHEL7、Mac OS X默認(rèn)都是bash。
IC企業(yè)里用tcsh的居多,因?yàn)榇蠹以榷荚赟olaris里干活,老版本的Solaris默認(rèn)是csh。
在RHEL6、7里,sh軟鏈接指向bash,csh軟鏈接指向tcsh。
zsh很流行,顏色很好看,自動(dòng)化功能很強(qiáng)大,特別是Oh My Zsh的擴(kuò)展使用zsh成為了終極shell。可惜的是,很多芯片設(shè)計(jì)公司服務(wù)器沒有安裝,周圍也沒有同事用。
EDA安裝目錄里有ksh腳本,說(shuō)明有一些IC企業(yè)在用ksh,但國(guó)內(nèi)用的人極少。
基于以上的分析,對(duì)于普通ICer,我們的結(jié)論是:
如果你是普通搬磚的ICer,有啥用啥,周圍同事用啥你也用啥。所以bash和tcsh都得學(xué)。
如果你是公司的領(lǐng)導(dǎo)(Leader、經(jīng)理、中層管理等),你讓手下用啥,手下就用啥。需要考慮生產(chǎn)力,傳統(tǒng),學(xué)習(xí)培訓(xùn)成本。
在家,你愛用啥用啥,看著舒服,用著順手就行。
另外,由于Tcl、Perl、Python等腳本語(yǔ)言的強(qiáng)大,我們只需要了解和掌握shell的常見、簡(jiǎn)單用法即可。把復(fù)雜的編程交給Tcl/Perl/Python去做吧。
shell簡(jiǎn)易教程
注釋
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ù)組下標(biāo)從0開始,tcsh和zsh從1開始。
#2 bash引用關(guān)聯(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ù)組只對(duì)當(dāng)前shell有效。但如果寫在用戶配置文件~/.tcshrc里,path也是對(duì)所有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的[ ]內(nèi)部必須有空格
循環(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ù)組長(zhǎng)度的表示方式不同,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í),在函數(shù)內(nèi)部用$1, $2, $3等取得
#3 return的返回值保存在內(nèi)置變量$?里
#4 函數(shù)調(diào)用時(shí),參數(shù)直接寫在函數(shù)名后面,與linux命令的格式相同
#5 tcsh不支持函數(shù)的語(yǔ)法,可以用alias實(shí)現(xiàn)類似函數(shù)的功能
下面是tcsh里用alias實(shí)現(xiàn)類似求和函數(shù)sum的例子。alias只是起到簡(jiǎn)化代碼的作用,相當(dāng)于宏定義。
1#tcsh 2aliassum'@sum=$a+$b';echo$sum 3seta=1 4setb=2 5sum#outputis3 6setb=10 7sum#outputis11
審核編輯:劉清
-
IC設(shè)計(jì)
+關(guān)注
關(guān)注
37文章
1287瀏覽量
103445 -
Linux
+關(guān)注
關(guān)注
87文章
11125瀏覽量
207934 -
Shell
+關(guān)注
關(guān)注
1文章
359瀏覽量
23194 -
Bash
+關(guān)注
關(guān)注
0文章
57瀏覽量
10136
原文標(biāo)題:IC設(shè)計(jì)中Linux shell的選擇和使用(bash、tcsh、zsh)
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論