IC设计中Linux shell的选择和使用(bash、tcsh、zsh)

IC设计中Linux shell的选择和使用(bash、tcsh、zsh)

你很可能正在使用bash,也可能是csh。你可能听说过sh、tcsh。如果你安装过EDA,就知道某EDA要正常工作必须要装ksh。另外你可能还听某大神安利过zsh……

一图看懂各种shell的联系与区别那这么多shell有什么联系和区别,我们先来看看它们的历史和关系。下图基于维基百科资料整理:

ICer该如何选择shell那么这么多shell,我们ICer该如何选择呢?看以下几条信息:

在现代化的操作系统中,比如Solaris11、RHEL7、Mac OS X默认都是bash。IC企业里用tcsh的居多,因为大家原先都在Solaris里干活,老版本的Solaris默认是csh。在RHEL6、7里,sh软链接指向bash,csh软链接指向tcsh。zsh很流行,颜色很好看,自动化功能很强大,特别是Oh My Zsh的扩展使用zsh成为了终极shell。可惜的是,很多芯片设计公司服务器没有安装,周围也没有同事用。EDA安装目录里有ksh脚本,说明有一些IC企业在用ksh,但国内用的人极少。基于以上的分析,对于普通ICer,我们的结论是:

如果你是普通搬砖的ICer,有啥用啥,周围同事用啥你也用啥。所以bash和tcsh都得学。如果你是公司的领导(Leader、经理、中层管理等),你让手下用啥,手下就用啥。需要考虑生产力,传统,学习培训成本。在家,你爱用啥用啥,看着舒服,用着顺手就行。另外,由于Tcl、Perl、Python等脚本语言的强大,我们只需要了解和掌握shell的常见、简单用法即可。把复杂的编程交给Tcl/Perl/Python去做吧。

shell简易教程注释

1# this is comment用户配置文件

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="AI Chips, Co. LTD"

3EDA_HOME=/tools/eda

4echo $EDA_HOME

5my_array=(1 2 3 4)

6echo ${my_array[0]} #output is 1

7my_hash['first']=1

8my_hash[second]=2

9echo ${my_hash[first]}

10

11#tcsh

12CompanyInfo = "AI Chips, Co. LTD"

13set EDA_HOME = /tools/eda

14echo $EDA_HOME

15set my_array = (1 2 3 4)

16echo $my_array[1] #output is 1

17

18#zsh

19CompanyInfo="AI Chips, Co. LTD"

20EDA_HOME=/tools/eda

21echo $EDA_HOME

22my_array=(1 2 3 4)

23echo $my_array[1] #output is 1

24decare -A my_hash

25my_hash['first']=1

26my_hash[second]=2

27echo $my_hash[first]Tips:

1 bash数组下标从0开始,tcsh和zsh从1开始。

2 bash引用关联数组用${my_hash[first]},tcsh和zsh不需要{},直接$my_hash[first]。

环境变量

1#bash, zsh

2export NOVAS_HOME=/tools/eda/synopsys/novas

3或者

4NOVAS_HOME=/tools/eda/synopsys/novas

5export NOVAS_HOME

6

7#tcsh

8setenv NOVAS_HOME /tools/eda/synopsys/novasTips:

1 tcsh的path数组只对当前shell有效。但如果写在用户配置文件~/.tcshrc里,path也是对所有shell有效的。

条件

1#bash, zsh

2foo="a"

3if [ $foo = "a" ]; then

4 echo "equal"

5fi

6

7#csh

8set foo = "a"

9if($foo == "a")then

10 echo "equal"

11endifTips:

1 考虑兼容性,bash、zsh中的字符串比较用=,而tcsh里用==

2 bash、zsh的[ ]内部必须有空格

循环

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 数组长度的表示方式不同,bash里用${#arr\[\*\]}或者${#arr[@]},tcsh和zsh用$#arr

2 bash用for var in {0..9},tcsh用foreach var ($array),zsh用for var ($array)

函数

1#bash, zsh

2function sum(){

3 return $(($1+$2))

4}

5sum 1 2

6echo "sum = $?"Tips:

1 函数必须先定义后使用

2 函数传入参数时,在函数内部用$1, $2, $3等取得

3 return的返回值保存在内置变量$?里

4 函数调用时,参数直接写在函数名后面,与linux命令的格式相同

5 tcsh不支持函数的语法,可以用alias实现类似函数的功能

下面是tcsh里用alias实现类似求和函数sum的例子。alias只是起到简化代码的作用,相当于宏定义。

1#tcsh

2alias sum '@ sum = $a + $b'; echo $sum

3set a = 1

4set b = 2

5sum #output is 3

6set b = 10

7sum #output is 11更多资料推荐

bash

菜鸟教程

http://www.runoob.com/linux/linux-shell.html

IBM Bash实例教程

https://www.ibm.com/developerworks/cn/linux/shell/bash/bash-1/index.html

https://www.ibm.com/developerworks/cn/linux/shell/bash/bash-2/index.html

https://www.ibm.com/developerworks/cn/linux/shell/bash/bash-3/index.html

GNU Bash参考手册

http://www.gnu.org/software/bash/manual/bash.html

tcsh

IBM Tcsh shell变量

https://www.ibm.com/developerworks/cn/aix/library/au-tcsh/index.html

tcsh - unix, linux command

http://www.tutorialspoint.com/unix_commands/tcsh.htm

杜克大学的一篇c shell教程

https://www2.cs.duke.edu/csl/docs/csh.html

zsh

陌辞寒的zsh开发指南

https://github.com/goreliu/zshguide

池建强的zsh的介绍、安装和配置

终极Shell(上)

终极Shell(下)

作者:陈锋文章来源:ExASIC推荐阅读

处芯积律对IC新人的一些提醒和建议IC设计错误案例:fifo读控制错误【知识科普】PCIe 5.0验证实战,经常遇到的那些问题?数字IC工程师的护城河是什么?什么是PDK?它的作用是什么?更多IC设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

相关发现

周易古诀寻失物:教你把丢失的东西找回来!
365bet娱乐场体育在线

周易古诀寻失物:教你把丢失的东西找回来!

🌼 06-30 🌻 5043
福布斯全球富豪榜
完美体育365wm

福布斯全球富豪榜

🌼 07-11 🌻 6986
d类数字功放芯片音质怎么样?
365bet365

d类数字功放芯片音质怎么样?

🌼 07-15 🌻 2862
华少主持过的综艺节目大盘点(华少最新主持的综艺节目)