全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > EDA/IC设计 >

IC设计中Linux shell的选择和使用

时间:2023-10-31 11:27

人气:

作者:admin

标签: IC设计  Shell  Linux  bash 

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

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

一图看懂各种shell的联系与区别

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

59b34df6-779c-11ee-939d-92fbcf53809c.jpg

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#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数组下标从0开始,tcsh和zsh从1开始。

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

环境变量

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数组只对当前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的[ ]内部必须有空格

循环

 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
2functionsum(){
3return$(($1+$2))
4}
5sum12
6echo"sum=$?"

Tips:

#1 函数必须先定义后使用

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

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

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

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

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

1#tcsh
2aliassum'@sum=$a+$b';echo$sum
3seta=1
4setb=2
5sum#outputis3
6setb=10
7sum#outputis11






审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信