0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

sanyue7758 来源:ExASIC 2023-10-31 11:27 次阅读

你很可能正在使用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






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IC设计
    +关注

    关注

    37

    文章

    1264

    浏览量

    102960
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206738
  • Shell
    +关注

    关注

    1

    文章

    358

    浏览量

    22903
  • Bash
    +关注

    关注

    0

    文章

    57

    浏览量

    10072

原文标题:IC设计中Linux shell的选择和使用(bash、tcsh、zsh)

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux Shell脚本入门到实战详解

    Linux Shell脚本入门到实战详解
    发表于 02-17 15:03 479次阅读

    Linux shell脚本分享

    今天浩道跟大家分享几个Linux运维中常用到的shell脚本!
    发表于 07-18 09:53 457次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>shell</b>脚本分享

    Linux Shell系列教程之Shell简介和类型

    编写的,Linux占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。cshcsh 是Linux比较大的内核,它由以William Joy为代表的共计4
    发表于 08-28 13:56

    Linux Shell系列教程之Shell注释

    和Date字段就是Shell的注释。而且Shell没有多行注释,只有单行注释,所以只有这一种注释方式来注释代码。linux学习交流群:6
    发表于 08-29 15:55

    Linux Shell系列教程之Shell for循环

    是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表的值依序放入指定的变量,然后重复执行命令区域(在do和done 之间),直到所有元素取尽为止。  Shell for循环
    发表于 09-04 15:16

    shell是什么?shell的变量有哪些

    shell是什么?Linux提供的Shell解析器有哪几种?shell的变量有哪些?
    发表于 09-30 08:23

    linux shell命令/unix shell命令教程

    linux shell命令/unix shell命令教程:为了防止未授权用户访问你的文件,可以在文件和目录上设置权限位。还可以设定文件在创建时所具有的缺省权限:这些只是整个系统安全问题中
    发表于 12-06 13:08 61次下载
    <b class='flag-5'>linux</b> <b class='flag-5'>shell</b>命令/unix <b class='flag-5'>shell</b>命令教程

    米尔科技Linux Shell编程介绍

    Shell是用户与内核进行交互操作的一种接口,是Linux最重要的软件之一。
    的头像 发表于 11-25 08:58 1432次阅读
    米尔科技<b class='flag-5'>Linux</b> <b class='flag-5'>Shell</b>编程介绍

    Linuxshell脚本执的4种方式

    Linuxshell脚本的执行通常有4种方式,分别为工作目录执行,绝对路径执行,sh执行,shell环境执行。
    发表于 05-23 09:28 802次阅读
    <b class='flag-5'>Linux</b>中<b class='flag-5'>shell</b>脚本执的4种方式

    Linux开发_Shell脚本编程语言

    介绍LinuxShell编程,介绍shell里语句、变量、函数、运算符的使用。
    的头像 发表于 09-17 15:39 934次阅读

    Linux命令行与shell脚本编写

    Linux命令行与shell脚本编写
    发表于 01-11 16:50 4次下载

    Linux基础知识中的Shell

    Shell便是Linux命令行环境CLI,直观意思是“外壳”,这一点与Linux内核对应。
    的头像 发表于 02-15 10:54 612次阅读

    剖析Linux shell 函数实现

    作为一个嵌入式 Linux 工程师,肯定需要编写 shell 脚本进行一些自动化工作。刚好,我最近就有类似需求——一键交叉编译 DDS。本着“编写漂亮代码的原则”,我用到了 **shell 函数** 。
    的头像 发表于 05-12 10:27 338次阅读
    剖析<b class='flag-5'>Linux</b> <b class='flag-5'>shell</b> 函数实现

    shell命令和linux命令一样吗

    Shell命令和Linux命令并不完全一样。 首先,Shell是一种命令行解释器,它是用来解释和执行用户输入的命令的。Shell既是一种命令语言,也是一种程序设计语言。它可以由一系列的
    的头像 发表于 11-08 10:51 1384次阅读

    linux命令和shell编程有什么联系

    Linux命令和Shell编程之间存在密切的联系。 首先,ShellLinux命令行下的解释器,它提供了一个用户界面,使用户能够与Linux
    的头像 发表于 11-08 10:53 415次阅读