<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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

    文章

    1275

    瀏覽量

    103145
  • Linux
    +關注

    關注

    87

    文章

    11017

    瀏覽量

    206957
  • Shell
    +關注

    關注

    1

    文章

    358

    瀏覽量

    22941
  • Bash
    +關注

    關注

    0

    文章

    57

    瀏覽量

    10087

原文標題:IC設計中Linux shell的選擇和使用(bash、tcsh、zsh)

文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux Shell腳本入門到實戰詳解

    Linux Shell腳本入門到實戰詳解
    發表于 02-17 15:03 ?491次閱讀

    Linux shell腳本分享

    今天浩道跟大家分享幾個Linux運維中常用到的shell腳本!
    發表于 07-18 09:53 ?467次閱讀
    <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

    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腳本,請將下面的shell腳本(并附加為PDF和ODT文件)復制到文本編輯器中,保存,使其可執行并運行。當您了解更多Linux命令時,您可以創建更復雜的she
    的頭像 發表于 11-06 17:28 ?1.3w次閱讀

    米爾科技Linux Shell編程介紹

    Shell是用戶與內核進行交互操作的一種接口,是Linux最重要的軟件之一。
    的頭像 發表于 11-25 08:58 ?1461次閱讀
    米爾科技<b class='flag-5'>Linux</b> <b class='flag-5'>Shell</b>編程介紹

    Linuxshell腳本執的4種方式

    Linuxshell腳本的執行通常有4種方式,分別為工作目錄執行,絕對路徑執行,sh執行,shell環境執行。
    發表于 05-23 09:28 ?818次閱讀
    <b class='flag-5'>Linux</b>中<b class='flag-5'>shell</b>腳本執的4種方式

    Linux開發_Shell腳本編程語言

    介紹LinuxShell編程,介紹shell里語句、變量、函數、運算符的使用。
    的頭像 發表于 09-17 15:39 ?969次閱讀

    Linux命令行與shell腳本編寫

    Linux命令行與shell腳本編寫
    發表于 01-11 16:50 ?4次下載

    Linux基礎知識中的Shell

    Shell便是Linux命令行環境CLI,直觀意思是“外殼”,這一點與Linux內核對應。
    的頭像 發表于 02-15 10:54 ?637次閱讀

    剖析Linux shell 函數實現

    作為一個嵌入式 Linux 工程師,肯定需要編寫 shell 腳本進行一些自動化工作。剛好,我最近就有類似需求——一鍵交叉編譯 DDS。本著“編寫漂亮代碼的原則”,我用到了 **shell 函數** 。
    的頭像 發表于 05-12 10:27 ?364次閱讀
    剖析<b class='flag-5'>Linux</b> <b class='flag-5'>shell</b> 函數實現

    shell命令和linux命令一樣嗎

    Shell命令和Linux命令并不完全一樣。 首先,Shell是一種命令行解釋器,它是用來解釋和執行用戶輸入的命令的。Shell既是一種命令語言,也是一種程序設計語言。它可以由一系列的
    的頭像 發表于 11-08 10:51 ?1647次閱讀

    linux命令和shell編程有什么聯系

    Linux命令和Shell編程之間存在密切的聯系。 首先,ShellLinux命令行下的解釋器,它提供了一個用戶界面,使用戶能夠與Linux
    的頭像 發表于 11-08 10:53 ?466次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>