一文掌握cshell编程(概念、案例双管齐下)

2023-09-21 00:20:07

前言

相信在IC行业中不少公司使用cshell作为脚本语言之一,很不幸的是目前网络上cshell的中文介绍少之又少,绝大部分是bash的介绍。近期有幸阅读了一本cshell cookbook,故将个人的学习心得发布于此,也希望志同道合的朋友一起探讨一番。(从看cookbook到博文的发表历时4个月,每天下完班就瞌睡的很,icer sandman无疑了,当然也是创作不易呀)。
下面我将从cshell的变量,字符处理,文件处理和基本的语句结构进行介绍。本文假设读者对cshell脚本一无所知,sandman力求写一篇白菜教程。因此,仅仅需要读者了解如何跑cshell的脚本即可,即terminal中输入source xxxx.csh。现在知道也不迟的,详细仔细阅读这篇文章对于编写或者修改cshell脚本有较大的帮助。

shell selection(shell类型选择)

通常在cshell脚本的第一行,我们需要指明脚本的类型,这有助于UNIX系统去解析对应的脚本。换句话说,系统需要知道用户source的脚本是哪一种类型的,是perl,bash,cshell还是TCL(后续sandman会慢慢的更新,但是不知道何时有空更新,随缘吧)

#!/bin/csh   #注释:正常情况下写这一条代码就可以了,因为bin目录下一般会存在csh。

有了前面的铺垫后,下面开始进入正题:

变量

cshell的变量可以分为标量,数组和特殊变量。

  1. 标量(scalar)
    set是给标量赋值的关键字。cshell中没有字符串,整型,负数以及浮点型的区别,统一使用set为标量赋值,下面看几个例子。
set colour = blue
set title = "hello world"
set float_dat = 1.23E-09
set int_dat = 9
set int_dat_s = -9

由此可知,设置变量的范式如下所示。

set VAR_NAME = VALUE #VAR_NAME: 标量名称;VALUE:标量值

另外,在某些情况下可能需要移除某个标量,被移除的标量不能在后续的程序中使用。cshell脚本中使用unset便可实现。如移除colour。

set colour = blue
#标量参与了某件事情的处理
unset colour
#由于使用unset移除了colour,因此后续不能在使用 colour这个标量

值得注意的是:unset支持字符匹配的方式,表示匹配的标量都会被移除,如下所示。

unset iso_* #表示移除名称是以iso_为前缀的所有标量,如iso_a,iso_1, iso_1234等。

另外,可能还有setenv这个关键字,该关键字表示设置系统标量,即整个系统都可以看见。移除某个系统标量的关键字为unsetenv。那么两者的区别是什么呢?setsetenv两者的区别为:可见的范围不同。

  • set定义的标量仅仅是当前脚本可见。
  • setenv定义的变量是系统可见,可以用echo输出系统标量,即echo $SYS_VAR_NAME

个人建议少用系统标量,要用也应该避免和系统中以后的标量名重复。即,假设系统中有一个标量的名字为SYS,如果我们在编写xxx.csh脚本时,一步小心写setenv SYS = 1, 那么source xxx.csh后,原本的SYS将变成1,覆盖了之前的值,这可能是灾难性的后果。

这里介绍一个使用系统标量的实际案例。有些场景中需要在cshell中调用TCL,并且不是直接调用,中间可能还包了一层或者几层的其他脚本,如Makefile。然而,我们需要把cshell中的某个标量值传递给TCL,为了简单起见且修改最少的内容,我们可以把需要传递的标量定义为系统标量,这样在TCL中我们就可以直接使用。

setenv SWCH_ME = "ON" # 定义系统标量SWCH_ME
# 下面是TCL语句
set SWCH = $ENV{
   SWCH_ME} #TCL中引用系统标量SWCH_ME

我想关于标量的描述有这些就够了。

  1. 数组(array)
    数组可以简单的理解为多个标量组合。即通过括号将多个标量组合起来,并且使用空格作为分隔符。其中,一个数组里面可以包含不同类型的标量,如整型,浮点型,字符型等。另外如果数组中包含了带空格的字符串,那么一定需要使用双引号将字符串包起来,否则字符串会被解析器认为是数组中的多个元素。简单示例如下所示。
set coluors = (blue yellow green red pink)
set misc = ("hello world" blue 3 -4 1.34E09)

其中,hello world不采用“”包起来的话,那么解析器就会认为hello是数组misc的一个元素,world是数组的另一个元素。
数组的范式如下所示:
在这边插一个打印数组的方式,在debug期间经常会使用,当然后文会有较为详细的介绍。

echo "info coluors array: $coluors"
echo "info misc array: $misc"
set ARR_NAME = (ELEM1 ELEM2 ELEM3)

定义好数组后,更加关键的是如何使用。下面以一个实例详细的介绍数据的使用。
定义一个数组prime:

set prime = (1 2 3 4 5 6 7 8 9)
# $#prime的结果为9;
# $prime[*]的结果为:1 2 3 4 5 6 7 8 9;
# $prime[$]的结果为:9;
# $prime[3-5]的结果为:3 4 5;
更多推荐

成都瀚网科技有限公司:抖店平台买家怎么修改评价?

在抖音电商平台上,买家的评价对店铺的声誉和销售业绩有着重要影响。然而,有时买家可能会因为某些原因想要修改之前的评价。那么,抖店平台上的买家如何修改评价呢?修改评价对店铺有什么影响?本文将介绍买家如何修改评价。并探讨可能的影响。1.如何修改抖店评论在抖店平台上,买家可以通过以下步骤修改之前的评论:A。打开抖音APP并登录

python项目2to3方案预研

目录官方工具2to3工具安装参数解释基本使用工具缺陷future工具安装参数解释基本使用工具缺陷python-modernize工具安装参数解释基本使用工具缺陷pyupgrade工具安装参数解释基本使用工具缺陷对比官方工具2to32to3是Python官方提供的用于将Python2代码转换为Python3代码的工具。它

Docker compose

文章目录Dockercompose1.介绍2.为什么要DockerCompose3.DockerCompose文件(docker-compose.yml)imagecommandentrypointenvironmentnetworksvolumesportsexposedepends_onenv_file4.Dock

Java21的新特性

Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java18的新特性Java19的新特性Java2

STM32WB55开发(3)----断开蓝牙连接

STM32WB55开发----3.断开蓝牙连接概述硬件准备视频教学样品申请源码下载选择芯片型号配置时钟源配置时钟树RTC时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙LED配置设置工程信息工程文件设置参考文档SVCCTL_App_NotificationACI_HAL_GET

【C++】继承

文章目录一、继承的定义1.1继承的定义方式1.2继承关系与访问限定符二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承和友元六、继承和静态成员六、多继承导致的菱形继承七、继承总结一、继承的定义继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持

ARM如何利用PMU的Cycle Counter(时钟周期)来计算出CPU的时钟频率

本章将学习如何利用ARMPMU的CycleCounter,来计算出CPU的时钟周期,从而计算出CPU的时钟频率。在介绍计算方法前,有必要先介绍下什么是时钟周期、机器周期以及指令周期。如何计算出CPU的时钟频率一,时钟周期,机器周期以及指令周期1.1时钟周期(clockcycle)以及时钟频率(clockfrequenc

SQL plus简单使用

查看Oracle数据库全部数据库数据库名称SELECTnameFROMv$database;这将返回所有数据库的名称。视图通过SQL查询dba_registry视图:另一个查看数据库的方法是查询dba_registry视图,该视图包含了数据库中安装的所有组件的信息。以下是示例SQL查询:SELECTcomp_nameF

我的git笔记

git加速https://ghproxy.com/https://github.com/cudpp/cudpp.gitgitclonehttps://ghproxy.com/https://github.com/triple-Mu/YOLOv8-TensorRT.git安装git#删除当前gitsudoapt-getr

002-第一代硬件系统架构确立及产品选型

第一代硬件系统架构确立及产品选型文章目录第一代硬件系统架构确立及产品选型项目介绍摘要硬件架构硬件结构选型及设计单片机选型上位机选型扯点别的关键字:Qt、Qml、信号采集机、数据处理、上位机项目介绍欢迎来到我们的QML&C++项目!这个项目结合了QML(QtMeta-ObjectLanguage)和C++的强大功能,旨在

clickhouse学习之路----clickhouse的特点及安装

clickhouse学习笔记反正都有学不完的技术,不如就学一学clickhouse吧文章目录clickhouse学习笔记clickhouse的特点1.列式存储2.DBMS的功能3.多样化引擎4.高吞吐写入能力5.数据分区与线程级并行clickhouse安装1.关闭防火墙2.CentOS取消打开文件数限制3.安装依赖4.

热文推荐