脚本怎么写???(代码片段)

aagnosticengineer aagnosticengineer     2023-05-04     491

关键词:

在MICAS的这段时间,我深刻体会到了Linux系统与写脚本做仿真、做综合、做分析的重要性,对于一个硬件开发者而言,学会Linux系统的操作也是以编写脚本、运行脚本为目的的。这篇随笔我会记录一些最基本的Linux命令,以及四种脚本的使用方法以及一些实例。

想系统学习可以上这个网:https://www.runoob.com/linux/linux-tutorial.html,但我建议先了解然后现学现用

  • 什么是Shell
    • Shell是一个应用程序,连接了用户和linux内核,shell在开机时就会启动等待接收命令并作出响应,相当于一个解释器,解释用户的指令,直观来看就是命令窗口。个人理解是,windows也有类似shell的应用程序,只不过windows中的shell做成了gui的形式,只需要用鼠标点一点就输入一个shell指令打开网页或是打开应用程序。
  • Bash Shell:打开linux的命令窗口就相当于进入了bash shell,也是linux中缺省的shell,我们键入的命令都是由bash shell解释器解释给内核并完成操作的。
    • cd <folder name>:进入目录;ls:展示当前窗口的文件;rm <file name>:删除文件;rm -rf <folder name>:删除文件夹;mkdir<folder name>:创建文件夹。
    • vim/kate <file name>:打开文件,其中进入vim界面后,可以按i进入输入模式,按esc回到控制模式。控制模式下,:q为退出,:wq为保存并退出。这个指令也可以用于创建文件
    • echo $<var>:显示该变量当前的值,其中$<var>永远用于表示这个变量当前的值,echo相当于一个显示命令。
    • source<filename>:在命令窗口中执行文件中的每一行
    • /../表示上级目录,因此cd ..表示回到上级;/./表示当前目录;/~/表示主目录;表示下一行是接在本行后面的,执行时会当成一行
    • command -<op>,其中-表示该指令的选项(缩写),相当于--<option>。例如cd -h <==>cd --help,打开帮助界面
    • nautilus表示打开主文件夹gui界面,nautilus .表示打开当前文件夹gui界面
    • 键入tab可以自动补全命令/文件名等,非常好用
    • 通配符*,如*.txt即为该目录下所有txt文件
    • 当然,当你在某个软件打开的情况下,可以使用软件内部的命令,如打开ncverilog后ncverilog -f<file>就是编译<file>内所有列出的verilog文件,primetime <script>就是在primetime软件内执行后面列出的脚本。可以查阅相关手册以编写。
  • Makefile脚本(https://www.gnu.org/software/make/manual/make.html
    • makefile在我看来是一种特殊脚本,有着严格的格式,要执行makefile的内容需要使用make指令,当你键入make -<op>后该指令会自动在本目录下寻找makefile文件并读取其中的规则执行。其中command命令利用bash shell编译
    • makefile的格式如下:
      <target>:<prerequisite>
      <tab>    <command1>
      <tab>    <command2>
      ...
    • 举个例子
      clean:
          rm -rf INCA_libs
      nc: clean
          reset;     ncverilog +sv -f ../lst/files_verilog.txt      +nc64bit    +nctimescale+1ns/10ps +access+rwc -ALLOWREDEFINITION 
          
      nc_with_netlist: 
          rm -r INCA_libs     reset;     ncverilog +sv -f ../lst/files_verilog_with_netlist.txt      +nc64bit   +nctimescale+1ns/10ps +access+rwc -ALLOWREDEFINITION 
    • 以上这段makefile目的是对verilog进行仿真,我们如果在命令窗口键入make nc,则会编译nc后的字段:1.执行clean模块后的命令,即删除后面的文件夹以让上次结果不影响本次编译。2.按顺序执行下列commands。如果键入make nc_with_netlist则会执行该模块下的命令。
  • bash脚本
    • 第一行加入#!/bin/bash告诉系统这个脚本用bash编译器编译,文件后缀.sh。
    • 可以让这个脚本变成可执行文件,就是直接键入文件名就给你执行,但我认为source <script name>效果一样,若想使用,编写完成bash文件后输入如下命令:
      chmod +x ./filename.sh  #使脚本具有执行权限
      #######命令行输入./filename.sh可以直接执行该脚本
    • 变量定义直接说,双引号表示字符串“string”,不然表示整数
    • bash文件中的所有命令利用bash shell执行,因此就和在命令行中输入命令一样。这里加入介绍判断和循环语法,用例子说明,大家体会一下,百度也可
      #################files_tb.txt里面装了10个testbench,利用这个循环我可以生成10个测试文件,并输出10个vcd文件做分析
      for
      i in 1..10#i的值从1到10循环 do ncverilog +sv -f ./files_with_netlist.txt +sv $(sed -n "$i p" ./files_tb.txt) +nc64bit done
    • ##############网上抄的,大家看看结构
      if [ $1 -gt 100 ]
        then
        echo Hey thats a large number.
        pwd
      fi
  • tcl脚本
    • 个人感觉tcl脚本和bash脚本非常像,后缀.tcl,但一般而言tcl脚本在进入软件后使用,source <script name>进行调用。具体语法可以百度,比我说的全:)
  • python脚本
    • python脚本就相当于写python程序,非常非常非常好用,但是要在第一行加上#!/usr/bin/python/
    • 不想把脚本编程可在命令行输入python <filename>.py
    • 语法就是完完全全的python语法,本菜鸡在这里不说了,有问题百度
  • 正则表达
    • 正则表达:regular expression,用单个字符串匹配描述、匹配一系列不同的字符串,可以用于替换一个文本文件中的所有相同字符串。在python中有了re库后,python就可以使用正则表达式了,我最常用的linecache就可以用。
    • bash shell中sed、awk、grep等命令也可以用正则表达式

#######################插播一个latchup######################

  • latchup是如何产生的?
    • 在代码层面上,latch主要是由于if、case以及for等循环判断语句没有写完整导致的(缺少else、default或是for循环中有些信号没有定义),也可能是always后的敏感事件列表中没有完全列出模块内赋值号右边的变量,综合时这些不完整的代码有时候会被综合成latch并对网表级仿真造成一定影响,因此在综合后我们需要查看综合日志以确认无latch产生。同时,对于一些需要综合的数字设计,我们也要注意补全else、default等语句,对所有可能出现的情况进行判断。
  • latch和flip-flop的区别?
    • 简单来说就是latch是电平触发而flip-flop是边沿触发,虽说都有存储数据的功能,但出现latch后在功能上会与设计有出入,同时latch并不是同步电路,因此不可以同步复位,上电后会处于不定态,从而在网表仿真中出现错误。同时latch也会使得时序分析变得更加复杂,不能过滤毛刺,在设计中我们一般会避免latch的出现。

javascript反点击顶写脚本(代码片段)

查看详情

selenium怎么生成测试报告?(代码片段)

相信很多同学会写selenium的测试脚本,但是不知道怎么写测试脚本的测试报告吧,没事,让我来给大家分享~~第一步:importunittest#引入unittest框架fromHTMLTestRunnerimportHTMLTestRunner#引入HTMLTestRunner第二步:#需要引入... 查看详情

expect写脚本(代码片段)

expect写脚本~/.ssh/know_hosts文件[远程ip:公钥]当我们使用公钥去ssh连接一台远程主机时,系统默认会把访问过的主机的公钥都记录在~/.ssh/know_hostscat~/.ssh/known_hosts192.168.221.20ecdsa-sha2-nistp256AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABB 查看详情

零基础学员的shell脚本的写作思路详解(代码片段)

前言这两天一直再批改学员的脚本作业,大多数学员写的很好,有的学员写的不太好。还有一些还没有入门到学员不知道脚本该咋写。不知道脚本怎么写的学员,绝大多数犯了一个错误:一上来就把脚本想的太复... 查看详情

零基础学员的shell脚本的写作思路详解(代码片段)

前言这两天一直再批改学员的脚本作业,大多数学员写的很好,有的学员写的不太好。还有一些还没有入门到学员不知道脚本该咋写。不知道脚本怎么写的学员,绝大多数犯了一个错误:一上来就把脚本想的太复... 查看详情

shell脚本学习-练习写一个脚本2(代码片段)

 #1.依次展示/var目录下的对象,并说明是文件或者目录。格式如:Hello,$file.#2.统计一个有多少个文件。#!/bin/bash#ProgramDescription:#Author:Createdbyctu_lzq#Date:2018/11/15list=`ls/var|awk‘print$1‘`num=`ls/var|wc-l`foriin$list;doif[-f 查看详情

性能工具之ngrinder关联脚本编写(代码片段)

文章目录一、前言二、什么是关联?三、如何编写脚本?1、线上直接写脚本2、IDE中写脚本四、示例脚本一、前言在做性能测试,脚本的关联是一个比较棘手的问题,nGrinder脚本是怎么关联,其实也是比较简单... 查看详情

从零开始学写脚本(大麦网抢票上)第二天(代码片段)

接着我们上期的教程,今天带大家一起来学习下怎么去大麦网抢票我们先看看代码运行的视频效果https://vkceyugu.cdn.bspapp.com/VKCEYUGU-4a31945b-22cb-4446-83cb-b078e22c7b51/e67d6cf0-4569-48c4-ab8d-15bca1cf020b.mp4由于今天写的时候频繁下单又取消,导... 查看详情

写python脚本时,一定要加上这个(代码片段)

我发现有不少朋友写Python脚本非常随意,要么不用函数,要么函数随处定义,反正第一眼看不出要执行的第一行代码位于何处,这样的脚本可读性很差,而且容易隐藏bug,解决这个问题很简单,当我们... 查看详情

centos7下编写创建用户,删除用户脚本(代码片段)

刚开始学shell编程,自己写两个脚本玩玩创建用户:1#!/bin/bash2useradd$13echo$2|passwd--stdin$14echo"useraddsuccess"$1变量表示添加的用户名$2变量表示添加用户的密码运行脚本,例如添加新用户god01用户密码123456781#chmod755adduser.sh2#./adduser.shgod0... 查看详情

linux运行bat脚本怎么写代码

参考技术A以windows下备份sql数据库为例,开机自动执行.bat脚本1、新建dump.bat文件,文件中的代码如下:setYYYYmmdd=%date:~0,4%%date:~5,2%%date:~8,2%set"filename=test%YYYYmmdd%.sql"echo%filmb5fe55afb6fa161241天前原创Windows开机自动执行bat脚本 查看详情

[python][自己写的杀病毒脚本](代码片段)

电脑里的HTML都插入了一段VB病毒代码..只能自己手动清除了..发现Python确实好用importosimportre;Root=["H:"];forrootinRoot:forrt,dirs,filesinos.walk(root):forfinfiles:fname=os.path.splitext(f)iffname[1]=='.h 查看详情

将awk脚本写在文件里:一种高效的awk循环循环方式(代码片段)

...部的命令提前写入文件中。这样可以方便后续修改。将awk脚本写在文件里:一种高效的awk循环循环方式在shell循环中常常会内置固定的awk命令,如何让awk内部的命令的设定随着循环次数而变化呢?可以借助数组或文件来解决。需... 查看详情

是否可以写一个“字符串,如果是的话怎么样?(代码片段)

我需要将"写入字符串,因为脚本需要格式化,但我不知道该怎么做。是否需要将其标记为角色?答案你需要加倍它,把它放在一个单引号内或用`转义它echo"Thiswilloutputadoublequote"""echo'"Thiswillalsobeputindoublequotes"'echo"`"Thisisanotherwaytoqu... 查看详情

shell脚本100例之一(代码片段)

今天开始学习编写shell脚本100例,写博客的主要是为了记录这个过程,以便日后的回顾,今天开始第一个脚本:1、每天生成一个文件描述:请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为)2017-07-05.... 查看详情

自动化运维:写一个简单的shell脚本(案例)(代码片段)

一、需求1、test.sh脚本执行时候需要添加参数才能执行参数和功能详情如下:参数执行效果start启动中...stop关闭中...restart重启中...*脚本帮助信息...2、参数的数量有限制,只能是1个,多余一个会提示脚本的帮助信息3、帮助信息... 查看详情

将自己写的脚本添加至开机自启动服务和chkconfig的原理(代码片段)

将自己写的脚本添加至开机自启动服务和chkconfig的原理创建脚本测试[[email protected]~]#vimanuo.sh--创建个脚本#!/bin/bash#chkconfig:355388--指定3和5级别启动53的启动的顺序88是关闭的顺序#description:isanuo--可以随便说点啥,最好的说明这... 查看详情

初识脚本(代码片段)

1.1脚本认识 1#!/bin/bash 第一行,通常用来指定执行脚本的shell,/bin/bash是CentOS默认的shell 如果写到第二行,就是注释了 1#!/bin/sh 这样写也是可以的,sh是bash的软链接,和#!/bin/bash是没有区别的,理规范的开头使用#... 查看详情