Csh的基本语法介绍

2024-03-18 17:32
文章标签 介绍 语法 基本 csh

本文主要是介绍Csh的基本语法介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在*unix系统中,常用的shell有sh,bash,csh/tcsh, ksh.

sh来自于systemV的Unix,是传统的Unix的shell,直到现在很多的系统管理员仍然喜欢使用sh。
bash来自于BSD Unix,语法非常类似于C语言,所以通常有C/C++编程背景的开发人员最喜欢使用。
ksh是对sh的扩展,且吸收了csh的一些有用的功能,但是由于开始ksh的license是AT&T,所以后来出现了很多的ksh的开源版本,例如mksh,pdksh等。
bash是现在很多Linux的发行版中默认的shell,综合了其他shell的很多优点。

下面描述csh的一些基本的语法(在sh环境中执行csh切换到csh环境):

1) 变量

通过set来定义局部变量x,通过$x或${x}来使用变量x的值,$%x表示变量的值的长度, $?x来判断变量x是否设置,如设置则为1,否则为0。

复制代码 代码如下:

set x = 5
echo $x
echo ${x}kg
echo $%x  

 

全局变量的定义setenv v  value 该变量将被此shell派生的所有子shell继承。

$$表示当前进程的PID, $status 或 $? 表示退出状态。

2)数组

定义数组myarr, 通过$myarr[index]来访问数组中的值,注意index是从1开始的。通过$myarr或$myarr[*]来访问数组所有的元素。通过$#myarr来查看元素的个数。

复制代码 代码如下:

set myarr = (str1, str2,str3)
echo $myarr[2]
echo $myarr
echo $myarr[*]

 

3)命令替换

通过set x = `cmd`来执行命令,且结果赋值给变量。

复制代码 代码如下:

set d = `date`
echo $d
echo $d[6]-$d[2]-$d[3]

 

4)命令行参数

通过$argv[1],$argv[2]或$1,$2来访问命令行参数。命令行参数的个数为$#argv。

5)文件名扩展的元字符

只能使用?,*,[abc],[a-c]。

6)IO重定向和管道

将命令的输出重定向到文件为>。
将命令的输出重定向并追加到文件为>>。
将命令的输入重定向到文件为<。
将命令的报错信息重定向到一个文件(cmd>/dev/tty)>&errors。
将命令的输出和错误输出分别重定向(cmd > goodstuff)  >& badstuff。

将命令的输出和报错信息重定向到一个文件cmd>&file。
将命令的输出经管道发往另一个命令cmd|cmd.
将命令的输出和报错信息经管道发往另一个命令cmd|&cmd。
条件语句为 cmd && cmd 或 cmd || cmd。
command<<WORD 表示将command的输入重定向为从第一个WORD处开始,到下一个WORD处之间的内容(即here文档)。

7)从键盘读取并保存到变量中

复制代码 代码如下:

set var = $<

 

8)算术

复制代码 代码如下:

@ var = 5 + 5
echo $var
@ v2 = $var + 3
echo $v2

 

9)代字符号扩展

~username 表示username的home目录。

10)别名

alias m more 为more创建别名m。
alias 列出所有的alias。
unalias m 用来删除more的alias定义。

11)初始化文件

.login 在登录时执行的文件。
.cshrc 在每次调用shell时都执行的文件。

12) label 和 goto

csh中没有函数的概念,使用类似windows批处理中的label和goto。

复制代码 代码如下:

goto label
......
label:
....

 

13) if/else/switch/case

复制代码 代码如下:

if(expression)then
  commands
endif
 

 

if {(command)} then
  commands
endif
 

if(expression) then
  commands
else if(expression) then
  commands
else
  commands
endif
 

switch("$value")
case pattern1:
  commands
  breaksw
case pattern2:
  commands
  breaksw
default:
  commands
  breaksw
endsw

 

14 while/foreach

复制代码 代码如下:

while(expression)
  commands
  continue

 

  break

end
foreach var (wordlist)
  commands
end

 

15、repeat

repeat表示重复执行后面的命令。

复制代码 代码如下:

repeat 3 "echo helloworld"

 

16、csh中设置环境变量PATH的方法

csh中使用path代替PATH,设置类似于数组的使用。

复制代码 代码如下:

set path = ($path /home)
echo $path
echo $PATH

 

17、source等价于其他shell中的.

source使得程序在当前的shell中被执行,而不是派生子进程来执行。

18、转义字符与单双引号

引号必须成对出现,而且必须在同一行上配对。可以用反斜杠来转义换行符,这样就能在下一行配对了。
单引号可用于保护双引号,双引号也可以用来保护单引号。
单引号保护除历史字符(!)之外的所有元字符不被解释。
双引号保护除历史字符(!),变量替换字符($)和反引号(用于命令替换)之外的所有元字符,使其不被解释。

19、历史command

history用来查看command执行的历史。
!!用来执行上一条命令。

20、pushd和popd用来维护目录栈

21、csh -vx用来显示输入的原样和变量替换后的脚本,用来帮助调试。

22、在脚本中处理中断

复制代码 代码如下:

onintr finish
  <script continues here>
 
finish:
onintr - # Disable further interrupts
echo Cleaning temp files
exit 1

 

onintr 命令后跟一个标号名,finish是用户自定义的标号。如果发生中断,控制将被转移到finish标号。通常该行位于脚本的开头。除非当程序正在执行时按ctrl+C(中断键),此时控制将被转移到该标号。onintr - 表示屏蔽所有的中断,此时按下ctrl+C将会被忽略。 

23、noclobber 禁止覆盖变量,设定 $noclobber 预设变量改变输出重定向特性.    

变量设定语法 set noclobber

取消变量设定语法 unset noclobber

这个 noclobber 变量,它的功能便是停止重定向符号“>”的覆盖(overwiting)已存在文件以及符号“>>”要将字符写入一个不存在的文件时,自动产生该文件的特性。

仅用两个例子让读者明白,设定后的实际使用状况。 

例子一:

复制代码 代码如下:

% ps axu > testfile
% set noclobber
% echo "test set noclobber" > testfile
testfile: File exists.
% echo "test set noclobber" >! testfile
%

 

例子二:

复制代码 代码如下:

% set noclobber
% cat /etc/passwd >> nopass
nopass: No such file or directory
% cat /etc/passwd >>! nopass
%

这篇关于Csh的基本语法介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/823103

相关文章

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav