第5章C-shell的交互功能
cshell语法
cshell语法
C Shell (Cshell) 是一种功能强大的Unix shell,它是一种命令行解释器,用于管理和控制Unix操作系统。C Shell 具有与C 语言类似的语法和语义,使得它易于学习和使用。下面是C Shell语法的相关参考内容:
1. 命令格式:
- 命令通常由命令名称和选项组成,比如:`command -option1 -option2 argument1 argument2`
- 命令选项通常以"-"开头,用于控制命令的行为
- 参数是命令的输入,可以是文件名、目录名或其他命令需要的数据
2. 变量:
- 变量用于存储和操作数据
- 变量的命名规则与C语言类似,由字母、数字和下划线组成,区分大小写
- 设置变量的语法是:`set variable_name = value`
- 获取变量的值使用美元符号:`$variable_name`
3. 控制结构:
- if-then-else 语句用于根据条件执行不同的操作:
```
if (condition) then
command1
else
command2
endif
```
- for 循环语句用于重复执行一组命令:
```
for variable_name in (list)
command
end
```
- while 循环语句用于在给定条件为真时重复执行一组命令: ```
while (condition)
command
end
```
4. 输入/输出重定向:
- 输入重定向用于从文件中读取数据,使用 `<` 符号:
`command < input_file`
Shell脚本编写的高级技巧使用命令行选项进行交互式操作
Shell脚本编写的高级技巧使用命令行选项进
行交互式操作
在Shell脚本编写过程中,使用命令行选项进行交互式操作是一种高级技巧。通过命令行选项,用户可以在执行脚本时通过参数的方式传递数据,从而实现交互式的操作。本文将介绍Shell脚本编写中使用命令行选项的一些高级技巧和最佳实践。
一、命令行选项的基本概念
命令行选项是指在Shell脚本中通过参数的方式传递用户的输入。通常,命令行选项由命令行参数和选项值组成。通过命令行选项,用户可以通过执行脚本时提供的参数来自定义脚本的行为和输出。
在Shell脚本中,可以使用特定的命令行选项解析工具来处理命令行选项。常见的命令行选项解析工具有getopt和getopts,它们能够帮助我们方便地解析命令行参数并获取选项的值。
二、使用getopt解析命令行选项
getopt是一个通用的命令行选项解析工具,它能够帮助我们解析命令行参数和选项,并获取选项的值。下面是一个使用getopt解析命令行选项的示例:
```shell
#!/bin/bash
# 使用getopt解析命令行选项
options=$(getopt -o ab:c --long optiona,optionb:,optionc -- "$@") # 判断选项解析是否成功
if [ $? -ne 0 ]; then
echo "选项解析失败" >&2
exit 1
fi
eval set -- "$options"
# 解析命令行选项
while true; do
case "$1" in
-a|--optiona)
cshell语法
cshell语法
Cshell是一种Unix Shell程序,主要用于在命令行界面下与操作系统进行交互。Cshell语法是Cshell编程中必须掌握的一部分,它允许用户编写脚本来自动化一系列操作。
Cshell语法的基本结构与C语言类似,包含命令、参数和控制结构等。以下是一些常用的Cshell语法:
1. 命令和参数:
Cshell中,命令和参数是以空格分隔的。命令用来执行特定的任务,而参数用来给命令传递额外的信息。例如,在Cshell
中执行"ls -l"命令可以列出当前目录下的文件和文件夹,并显示详细信息。
2. 注释:
在Cshell中,使用"#"符号来注释一行代码。注释通常用来解释脚本的功能或提醒自己后续需要添加的代码。例如,可以在脚本中添加注释,说明某一行代码的作用。
3. 变量:
可以在Cshell中使用变量来存储值和临时数据。变量名不需要预先声明,直接使用即可。变量赋值使用"="符号,例如"var=100"。使用变量时需要使用"$"前缀,例如"echo $var"将会输出"100"。
4. 控制结构:
Cshell中提供了多种控制结构,用于根据条件执行不同的代码
块。常见的控制结构包括if语句、for循环和while循环。if语句用于条件判断,for循环用于重复执行一段代码块,while循
环用于在满足条件时执行一段代码块。
5. 输入和输出重定向:
Cshell提供了输入和输出重定向的功能,允许用户将命令的输
入和输出重定向到文件或其他设备。输出重定向使用">"符号,例如"ls > output.txt"将目录列表输出到名为output.txt的文件中。输入重定向使用"<"符号,例如"wc -l < input.txt"将会统计input.txt文件中的行数。
cshell的list定义
cshell的list定义
在C Shell(通常简称为csh或tcsh)中,list 通常不是一个特定的命令或数据结构,而是指一系列由分号(;)或换行符分隔的命令,它们可以在shell中顺序执行。C Shell 是一种流行的Unix shell,它提供了交互式的命令行界面,让用户能够执行命令、控制进程、处理数据等。
在C Shell中,你可以定义一系列的命令作为一个list来执行。这些命令可以包括简单的命令、循环、条件语句等。例如,你可以这样定义一个list:
csh
echo "Hello, World!"
ls -l
cd /home/user
在这个例子中,echo, ls, 和 cd 是单独的命令,它们被包含在一个list中,当这个list被执行时,这些命令会按照顺序一个接一个地执行。
此外,你还可以使用分号将多个命令放在同一行中,它们也会作为一个list被执行:csh
echo "Hello"; ls -l; cd /home/user
C Shell 还支持使用花括号 {} 来定义一个命令块(也称为list),这在编写循环或条件语句时特别有用。例如:
csh
foreach file (`ls`)
{
echo $file
}
在这个例子中,echo $file 是一个命令,它被包含在花括号 {} 中,作为一个list 来执行。这个list会被重复执行,每次迭代时,$file 会被替换为 ls 命令输出的一个文件名。
总之,在C Shell中,list 是一种组织和执行一系列命令的方式,它允许用户将多个命令组合在一起,以便更方便地执行复杂的任务。
学习笔记_cshell
1.基本命令
2.表达式
表达式可由常量、变量和以下运算符组成,其中部分是涉及文件而不是数值
表达式遵守以下规则:
1)shell将丢失参数或零参数看作是0;
2)所有的结果都是十进制数;
3)除了!=和==外,运算符的参数都是数字;
4)用户必须将表达式的每个元素与比邻的元素用空格分开,除非相邻元素是&、
/、<、>等。
3.shel变量
格式序列结果
%U 命令运行用户代码所消耗的时间,单位是C P U秒(用户模式)
%S 命令运行系统代码所消耗的时间,单位是C P U秒(核心模式)
%E 命令所消耗的Wa l l时钟时间(整个时间)
%P 任务周期内C P U所耗费的时间百分比,按照( % U + % S ) / % E计算%W 命令进程交换到磁盘的次数
%X 命令使用的平均共享代码内存量,单位是千字节
%D 命令使用的数据代码内存量,单位是千字节
%K 命令使用整个内存内存量,就是% X + % D,单位是千字节
%M 命令使用的最大内存量,单位是千字节
%F 主页错误数(不得不脱离磁盘读取的内存页)
%I 输入操作数
%O 输出操作数
作为开头的shell变量
4.控制结构
if(expression) simple-command
只对简单命令起作用,对管道或命令列表无效。可以用if….then控制结构来执行更复杂的命令
除逻辑表达式外,用户可以用表达式来返回基于文件状态的值如下:
如果指定的文件不存在或不可访问,csh将表达式的值算作0。否则如果测试结果是true,则表达式的值为1;如果为false,则表达式的值为0。
shell的分类
shell的分类
Shell是一种解释性的编程语言,它是一个命令行解释器,用于与操作系统交互。Shell是一种非常强大的工具,可以用来完成各种任务,如文件操作、系统管理、网络管理等。
Shell有很多种,每种都有其特定的用途和功能。在本文中,我们将讨论一些最常用的Shell类型。
1. Bourne Shell
Bourne Shell是最早的Shell之一,由Stephen Bourne在1977年开发。它是Unix系统的默认Shell。Bourne Shell的文件扩展名为.sh。Bourne Shell是一种命令行解释器,可以用于执行各种命令和脚本。它支持变量、条件语句、循环语句等。
Bourne Shell的主要变种是Bash和Korn Shell。Bash是Bourne Shell的增强版,它支持命令历史记录、命令自动补全等功能。Korn Shell是Bourne Shell的另一个变种,它增加了一些更高级的特性,如函数、数组等。
2. C Shell
C Shell是一种基于C语言语法的Shell,由Bill Joy在1978年开发。C Shell的文件扩展名为.csh。C Shell具有交互式命令行解释器和脚本解释器的功能。它支持命令历史记录、命令自动补全等功能。C Shell还支持一些高级特性,如别名、作业控制等。
3. Z Shell
Z Shell是一种功能强大的Shell,由Paul Falstad在1990年
开发。Z Shell的文件扩展名为.zsh。Z Shell是Bourne Shell和C Shell的综合体,它融合了两种Shell的特性,并增加了一些新的功能。Z Shell支持命令历史记录、命令自动补全、别名、作业控制、函数、数组等。
cshell三角函数
cshell三角函数
C-Shell是一种基于C语言的Unix Shell,它提供了类似于Bourne Shell的功能和语法,但是在很多方面都进行了改进和扩展。C-Shell也提供了对三角函数的支持,这为需要在C-Shell脚本中进行数学计算的用户提供了很大的方便。
在C-Shell中,可以使用内置的三角函数库来使用和计算三角函数。这个库包含了一些常见的三角函数,如sin、cos、tan等。下面是一些常用的三角函数在C-Shell中的使用方法:
1. sin函数:sin(x)函数返回角度x的正弦值。例如,要计算45度的正弦值,可以使用以下命令:
```shell
```
这里使用bc命令来进行浮点数计算,并将角度转换为弧度。返回的结果将被存储在变量$result中。
2. cos函数:cos(x)函数返回角度x的余弦值。使用方法与sin函数类似。例如,要计算60度的余弦值,可以使用以下命令:```shell
```
3. tan函数:tan(x)函数返回角度x的正切值。使用方法与sin和cos函数类似。例如,要计算30度的正切值,可以使用以下命令:```shell
```
4. asin函数:asin(x)函数返回x的反正弦值。可以使用以下命令
计算反正弦值:
```shell
```
这里使用的是bc命令来进行反三角函数的计算,并将弧度转换为角度。
5. acos函数:acos(x)函数返回x的反余弦值。使用方法与asin函
数类似。
6. atan函数:atan(x)函数返回x的反正切值。使用方法与asin函
数类似。
shell发展史
shell发展史
Shell发展史
一、引言
Shell是操作系统中的一种命令行解释器,它为用户提供了与操作系统内核进行交互的方式。Shell的发展可以追溯到计算机操作系统的早期阶段,随着计算机技术的不断发展,Shell也不断演变和完善。本文将围绕Shell的发展历程展开叙述。
二、早期Shell的诞生
在计算机操作系统诞生的早期,用户与计算机之间的交互主要通过命令行界面进行。早期的Shell相对简单,只能执行一些基本的命令,如文件管理、进程控制等。这些Shell主要是基于硬件平台的特点而开发的,如Unix操作系统上的Bourne Shell。
三、C Shell的出现
随着计算机硬件的不断发展和操作系统的日益复杂,早期的Shell 显得力不从心。为了提高用户的使用体验,C Shell应运而生。C Shell具有更加人性化的命令行语法,支持命令别名、命令历史记录等高级功能,大大提高了用户的工作效率。
四、Bourne Again Shell的崛起
随着Unix操作系统的广泛应用,Bourne Again Shell(简称Bash)应运而生。Bash是对传统Bourne Shell的增强和扩展,它继承了
Bourne Shell的优点,并加入了许多新的特性,如条件判断、循环控制、函数定义等。Bash成为了Unix和Linux系统中最常用的Shell,它为用户提供了强大而灵活的命令行环境。
五、图形化Shell的兴起
随着计算机图形界面技术的发展,人们开始追求更加直观、简单的交互方式。图形化Shell应运而生,如Windows系统上的PowerShell和Linux系统上的Korn Shell。这些图形化Shell提供了可视化的操作界面,用户可以通过鼠标点击和拖拽来完成任务,使得操作更加便捷和直观。
cshell循环语句 -回复
cshell循环语句-回复
CShell循环语句
CShell是一个强大的Unix Shell,它提供了丰富的命令和功能来帮助用户在Unix/Linux系统中进行操作和管理。其中一个重要的功能是循环语句,它允许用户重复执行一组命令,从而简化和自动化任务。在本文中,我们将深入探讨CShell循环语句的使用和技巧。
一、什么是循环语句?
循环语句是一种编程结构,允许程序重复执行一组命令,直到达到指定的条件。在CShell中,有两种主要类型的循环语句:while和for。while循环会在条件为真时重复执行一组命令,而for循环会在给定的范围内重复执行一组命令。
二、使用while循环
1. 基本语法
下面是while循环的基本语法:
while (condition)
command
end
其中,condition是一个逻辑表达式,如果结果为真,则执行command。如果condition的结果为假,则退出循环。
2. 示例
假设我们要打印从1到10的数字,可以使用while循环来实现:
set i = 1
while (i <= 10)
echo i
set i = `expr i + 1`
end
在上面的示例中,我们首先将变量i设置为1,然后在while循环中,我们打印i的值并将i增加1。该过程会重复执行,直到i的值大于10为止。这将导致将数字从1到10打印在屏幕上。
三、使用for循环
1. 基本语法
下面是for循环的基本语法:
for (init; condition; step)
command
end
其中,init是初始化表达式,condition是循环条件,step是循环步进表达式。for循环会先执行一次init,然后在每次循环迭代中检查condition,如果为真,则执行command并执行step。
cshell 正则表达式
CShell 正则表达式
1. 什么是 CShell?
CShell(C-Shell)是一种 Unix Shell,它起源于早期的 Unix 系统中用于命令行操作的 Shell。CShell 是一种高级的交互式编程语言,它允许用户通过命令行界面与操作系统进行交互,并执行各种任务。
2. 正则表达式简介
正则表达式(Regular Expression)是一种用于描述和匹配字符串模式的工具。CShell 中的正则表达式可以用来搜索、替换和测试字符串,以及对文本进行复杂的模式匹配和过滤。
正则表达式由一些特殊字符和普通字符组成,每个字符都有特定的含义。通过组合这些字符,我们可以构建复杂的模式来匹配字符串。
以下是一些常用的正则表达式元字符:
•.:匹配除换行符以外的任意字符。
•*:匹配前面的元素零次或多次。
•+:匹配前面的元素一次或多次。
•?:匹配前面的元素零次或一次。
•[]:用于指定一个字符集,匹配任意一个字符。
•():将多个元素组合为一个整体。
除了这些元字符,正则表达式还可以使用一些特殊字符来表示非打印字符(如换行符、制表符等)和特殊字符(如引号、反斜杠等)。
3. CShell 中的正则表达式用法
CShell 提供了一套用于处理正则表达式的内置命令和函数。下面介绍一些常用的正则表达式用法:
3.1. 使用正则表达式匹配字符串
在 CShell 中,可以使用match命令来测试一个字符串是否匹配某个正则表达式。例如,以下命令将检查字符串是否包含“hello”:
set str "hello world"
Bshell与Cshell详解
Linux主要shell命令详解
shell是用户和Linux操作系统之间的接口。Linux中有多种shell,其中缺省使用的是Bash。本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特性。
什么是shell
Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。
shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。
shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux
核心。
有一些命令,比如改变工作目录命令cd,是包含在shell内部的。还有一些命令,例如拷贝命令cp和移动命令rm,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。
shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。然后shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给Linux内核。
cshell 参数传递
cshell 参数传递
cshell是一种Unix shell,广泛用于Unix和Linux系统中。参数传递是在cshell 中非常常见且强大的功能之一。在这篇文章中,我们将详细介绍cshell参数传递的概念、语法、用法,以及一些实际的例子。
什么是参数传递?
参数传递是指在执行一个命令或脚本时,向它传递额外的参数。这些参数可以用于定制化命令的行为或者传递信息给脚本。通过参数传递的方式,我们可以使命令或脚本更加灵活和可配置。
在cshell中,参数传递以一种特殊的语法来实现,使用`argv`来表示所有的参数,`argc`来表示参数的个数。其中,`argv[0]`表示命令或脚本本身。
cshell参数传递的语法
在cshell中,我们可以使用以下语法来传递参数:
command arg1 arg2 arg3 ...
其中,`command`是要执行的命令或脚本,`arg1`、`arg2`、`arg3`等是要传递的参数。
cshell参数传递的用法
接下来,我们将介绍cshell参数传递的常见用法。
# 传递参数给命令
首先,我们可以将参数传递给一个命令。让我们以一个示例来说明:
ls -l argv
以上命令将会执行`ls`命令,并且将`argv`传递给它。在这个例子中,`argv`表示我们在命令行中输入的参数。例如,如果我们执行`ls -l file1 file2`,那么`argv`的值将会是`file1 file2`。这样,`ls`命令将会显示`file1`和`file2`的详细信息。
# 传递参数给脚本
同样地,我们也可以将参数传递给一个脚本。例如,考虑以下脚本`myscript.csh`
csh用法
csh用法
`csh` 是C Shell 的缩写,是一种Unix和Unix-like系统中的命令行解释器。C Shell 提供了一些特有的语法和功能,与其他Shell(如Bash或Zsh)有一些不同。以下是一些`csh` 的基本用法:
1. 启动`csh`:
```bash
csh
```
这将启动C Shell 并将你带入一个新的命令行环境。
2. 变量赋值:
```csh
set variable_name = value
```
在C Shell 中,你可以使用`set` 命令为变量赋值。
3. 变量引用:
```csh
echo $variable_name
```
使用`$` 符号引用变量的值。
4. 条件语句:
```csh
if (condition) then
# commands
else
# commands
endif
```
C Shell 使用`if` 和`endif` 来定义条件语句。
5. 循环:
```csh
foreach item (list)
# commands
end
```
使用`foreach` 来进行循环。`list` 是一系列空格分隔的元素。
6. 命令替换:
```csh
set result = `command`
```
使用\` 和\` 符号来执行命令并将结果赋值给变量。
7. 别名:
```csh
alias ll 'ls -l'
```
使用`alias` 命令创建别名。
8. 后台运行:
```csh
command &
```
使用`&` 符号使命令在后台运行。
9. 退出`csh`:
```csh
exit
```
csh tch sh bash的用法
csh tch sh bash的用法
csh, tch, sh 和bash 都是不同的Unix shell。下面是它们的用法和一些特点:
1. csh (C Shell):
- 用法:在终端中输入csh 或者在脚本的第一行写上"#!/bin/csh" 来使用csh。
- 特点:csh 主要是用于交互式操作,其语法类似于C 语言,支持以下特性:别名,命令补全,作业控制等。它还支持一些独特的功能如历史替换和内置变量。
2. tch (TENEX C Shell):
- 用法:在终端中输入tcsh 或者在脚本的第一行写上"#!/bin/tcsh" 来使用tcsh。
- 特点:tcsh 是csh 的改进版,增加了一些实用的功能。除了继承了csh 的特性外,它还支持命令行编辑,历史命令展示,变量扩展等特点。
3. sh (Bourne Shell):
- 用法:在终端中输入sh 或者在脚本的第一行写上"#!/bin/sh" 来使用sh。
- 特点:sh 是Unix 系统原始的shell,语法相对简洁,功能相对较少。它是其他shell 的基础,大多数Unix 系统都会支持sh。
4. bash (Bourne Again Shell):
- 用法:在终端中输入bash 或者在脚本的第一行写上"#!/bin/bash" 来使用bash。
- 特点:bash 是sh 的改进版,兼容sh 的语法,并且引入了很多新特性。它是大多数Linux 系统的默认shell,也是目前使用最广泛的shell。bash 支持命令行编辑,通配符扩展,命令历史记录等功能。
c shell编程
c shell编程
C Shell编程简介
C Shell(简称csh)是一种Unix操作系统下的命令解释器,也是一种脚本语言。它的语法和C语言非常相似,因此被称为 C Shell。
C Shell具有很强的交互性,能够方便地与用户进行交互,提供了丰富的命令和功能,能够满足不同用户的需求。
C Shell的基本语法结构与C语言类似,包括变量定义、条件语句、循环语句等。下面将介绍 C Shell编程的一些常用功能和技巧,帮助读者更好地理解和应用C Shell。
1. 变量和环境变量
C Shell中可以定义和使用变量,用于存储数据和结果。变量名以美元符号$开头,赋值使用等号=。例如,定义一个变量name并赋值为"John":$name="John"。使用变量时,需要在变量名前加上美元符号。例如,输出变量name的值:echo $name。
C Shell还支持环境变量,它们是全局变量,可以被所有的进程访问。环境变量可以通过setenv命令设置,使用时直接使用变量名即可。例如,设置一个名为PATH的环境变量:setenv PATH /usr/bin:/usr/local/bin。环境变量可以方便地用于配置系统的运行环境。
2. 条件语句
C Shell提供了条件语句用于根据条件执行不同的操作。条件语句的基本结构为if-else语句,可以根据条件的真假执行不同的代码块。例如,判断变量num的值是否大于100,并根据结果输出不同的信息:
if ($num > 100) then
echo "num大于100"
c语言 shell程序源码
c语言shell程序源码
摘要:
1.引言
2.C 语言简介
3.Shell 程序简介
4.Shell 程序源码实例
5.总结
正文:
C 语言是一种广泛应用于系统编程和应用开发的编程语言。它具有高效性、灵活性和强大的功能,使得许多开发者和学习者都选择它作为编程入门语言。在C 语言的学习过程中,编写Shell 程序是一个很好的实践项目,可以帮助我们更好地理解编程的基本原理和操作系统的运行机制。
Shell 程序,又称壳层程序,是一种用于管理操作系统资源的脚本程序。它可以让用户以一种简洁、直观的方式与操作系统进行交互。Shell 程序的编写通常使用C 语言或者Python 等编程语言。在这里,我们将通过一个简单的C 语言Shell 程序源码实例,来了解如何编写一个基本的Shell 程序。
以下是一个简单的C 语言Shell 程序源码实例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
char command[100];
printf("请输入要执行的命令:");
fgets(command, sizeof(command), stdin);
command[strcspn(command, "
")] = 0; // 去掉输入中的换行符
if (system(command) == 0) {
printf("命令执行成功!
");
} else {
printf("命令执行失败!
");
}
return 0;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
给别名传递参数
简单传递:dir ~ 复杂传递:【例5-1】 给别名命令传递参数的方法
第5章 C-shell的交互功能
csh提示符
csh的提示符由csh的变量prompt控制
prompt变量值(是一个字符串)中的!,在实 际显示时以命令号代替。 set prompt="[\!]%" 在!前加\以取消csh对!的特殊解释,实际上 变量prompt的值为[!]%串
终止
作为注册的csh终止时,要执行用户主目录中 的.logout退出脚本
第5章 C-shell的交互功能
5.3 使用csh的历史机制 5.4 别名 5.5 csh提示符
第5章 C-shell的交互功能
历史表
csh的历史机制
将最近一段时间内输入的命令保存起来,以便重复使 用或作少量后继续使用,避免了将命令重新输入的麻 烦。 前后键入的命令按顺序存于历史表,编号递增。 历史表大小有限,其上限值保存在变量history中,可 用命令set history=n设定。超出限制时,按FIFO的原 则抛弃命令 使用内部命令history可查看历史表 引用历史表:见[表5-1] C-shell历史替换的方法
第5章 C-shell的交互功能
本章小节
5.1 5.2 5.3 5.4 5.5 5.6 UNIX的shell csh启动与终止 使用csh的历史机制 别名 csh提示符 csh的管道和重定向
第5章 C-shell的交互功能
5.1 UNIX的shell 5.2 csh启动与终止
第5章 C-shell的交互功能
第5章 C-shell的交互功能
缓冲I/O和系统调用I/O编程示意图
标准输出 stdout,fd=1 标准输入 stdin,fd=0
程序
标准错误输出 stderr,fd=2
【例5-2】使用缓冲I/O的标准输出和标准错误输出 【例5-3】 使用原始I/O的标准输出和标准错误输出
第5章 C-shell的交互功能
输入输出重定向
输入重定向
<filename 从文件filename中输入
输出重定向
1. >文件:把stdout重定向到一个文件中,不影响stderr 仍然在终端输出
2. >&文件:把stderr合并到stdout,再重定向到一个文 件中。 3. >>文件或>>&文件:若文件不存在,则创建;若文件 已存在则追加到文件尾。
第5章 C-shell的交互功能
别名机制
csh的别名机制
可以为经常使用的命令取一个别名,以提高输入效率 或便于记忆。例如,可以为经常使用的命令取单字符 的别名,也可以为不便记忆的命令取含义明确的名字。 定义别名 alias 别名 替换命令 (不带参数则显示当前别名表) 取消别名 unalias 别名
UNIX的shell
shell的主要功能
作为交互式的命令解释器,是用户与系统之间的接口
支持文件名替换,命令替换,变量替换 支持管道和重定向操作
有流程控制的内部命令,支持程序设计
内部命令与外部命令
内部命令:在shell内部实现的命令 外部命令:shell之外用程序文件实现的命令 外部命令执行时需要搜寻程序文件并装入执行,因此 运行效率不如内部命令
第5章 C-shell的交互功能
csh的启动与终止
启动
csh的启动方法有两种:作为注册shell和直接执行命 令csh。前者在启动后将自动执行用户主目录中 的.cshrc和.login脚本程序,而后者仅执行.cshrc,其目 的是初始化执行环境。 不同用户有不同的主目录和初始化脚本程序,因此可 以安排执行不同的初始化操作
第5章 C-shell的交互功能
UNIX的shell
shell种类
B-shell:/bin/sh,是Stephen R. Bourne在贝尔实验室 开发的最早被普遍认可的UNIX的标准shell C-shell:/bin/csh,加利福尼亚大学的William N. Joy 在20世纪70年代开发,最初用在BSD2.0上 K-shell:/bin/ksh,贝尔实验室的David Korn在1986 年开发,是B-shell的超集,支持带类型的变量,数组 Bourne Again shell:/bin/bash,是LINUX上的标准 shell,兼容并扩展了B-Shell,吸收了C shell的某些特 点,命令行编辑非常方便
第5章 C-shell的交互功能
noclobber开关对重定向的影响
重定向 noclobber 开 >文件 >&文件 关 开 >>文件 >>&文件 关 文件状态 不存在 存在 不存在 存在 不存在 存在 不存在 存在 结果 创建 出错 创建 覆盖原文件 出错 追加 创建 追加
第5章 C-shell的交互功能
第5章 C-shell的交互功能
UNIX的shell
用户shell
管理员在创建用户时,在/etc/passwd文件中 设置了用户的登录shell,用户登录后即进入注 册的shell。 某/etc/passwd文件的片断如下:
tian:x:1289:100::/usr/tian:/bin/csh jiang:x:1306:100::/usr/jiang:/bin/sh liang:x:2167:100::/usr/liang:/bin/ksh sun:x:1283:100::/usr/sun:/bin/sh
第5章 C-shell的交互功能
5.6 csh的管道和重定向
来自百度文库
第5章 C-shell的交互功能
概述
管道
是进程之间通信的一种机制,shell利用此机制在命令 之间传递输入和输出。管道操作符用竖线|表示,作用 是使竖线前面的命令输出成为竖线后面的命令输入。
重定向
shell改变了它所执行的进程拥有的文件描述符,主要 是标准输入/输出/错误描述符,以便使进程原来的输入 输出对象切换到新的对象
重定向示意图
> filename
>& filename
第5章 C-shell的交互功能
管道
cmd1 | cmd2
把命令cmd1的stdout管道成cmd2的stdin ps -ef | grep liang
cc -c try.c -o try | more
cmd1 |& cmd2
把cmd1的stderr合并到stdout然后管道成 cmd2的stdin
管道和重定向实际上是shell利用进程之间的父子 关系实现的,第7章详述之
第5章 C-shell的交互功能
缓冲I/O和系统调用I/O
程序操作文件的两种模式
标准的缓冲I/O方式:这种方式间接利用系统调用实现 有缓冲的标准输入输出/错误输出,它是由标准I/O库函 数提供的,库预定义变量stdin、stdout和stderr代表标 准输入输出/错误输出文件I/O流给程序员直接使用。 系统调用的方式:shell通过系统调用打开标准输入输 出/错误输出文件描述符,其值分别为0,1,2。由于父 子进程文件描述符的继承关系,此种编程方式下这三 个描述符可直接使用,无需打开。
第5章 C-shell的交互功能
别名机制举例
定义别名
alias dir "ls -flad" alias n "netstat -p tcp -s | head -10" alias r "netstat -rn" alias h "history" alias rm 'rm -i' alias p 'ping 202.143.12.189' alias rt 'traceroute 217.226.227.27
cc -c try.c -o try |& more
第5章 C-shell的交互功能
管道示意图
cmd1 | cmd2
cmd1 |& cmd2
第5章 C-shell的交互功能
输入输出重定向
输出重定向
4. >!文件,>&!文件:若文件已存在则强制覆盖掉原文件; 否则创建 5. >>!文件和>>&!文件:若文件不存在,强制创建;否则 追加到尾部 注:对于第1~3种重定向,csh的noclobber(不销毁) 开关会有影响。设置或取消noclobber开关的命令分别 是: set noclobber unset noclobber