C Shell 详解 您所在的位置:网站首页 shell脚本常用功能 C Shell 详解

C Shell 详解

#C Shell 详解| 来源: 网络整理| 查看: 265

C shell 也是 shell 的 一种,以下为一个简单 cshell脚本;

#!/bin/csh //开头解释文件为 csh, 必须写 set a="helloworld" //shell 一般语法 echo $a //shell 一般语法 cd .. //系统命令cd ls //系统命令ls 一、C shell 的含义与作用

含义:是一种编程语言,有自己的语法;但其多数主要面向 命令 进行编程

作用:更加系统的执行用户的命令,解释执行用户的命令,如写一个shell 脚本 ,脚本中可能含义多个系统命令,shell执行时,就一起执行了多个命令,称为批处理。

二、C shell 的编程 重点知识

编写shell 脚本 须知:

编写工具:vim 、gvim

shell脚本的扩展名:.csh  文件

开头必须写:#! /bin/csh  //用来说明 该文件是 csh 格式

特殊符号说明:

$ : 表示取值、取消回显

# :表示 注释

echo :  表示 输出、显示

(1)变量

文献参考:

(64条消息) 【shell】Cshell_lbt_dvshare的博客-CSDN博客_cshell

(64条消息) [Cshell]Cshell基本語法 --- 從入門到精通_gsithxy的博客-CSDN博客_cshell

C Shell 编程中,需要用 set 修饰 变量,变量一直到脚本执行结束。

shell内变量只能在当前shell 进程中使用,不能跨进程。

注意:等号两边不能有 空格;

set a="helloworld"

//屏幕输出 helloworld

set a="helloworld" echo $a

//屏幕输出 任意想说的内容

echo "任意内容" (2)全局变量

setenv 定义全局变量,类似于define

setenv  NAME  "data"   //脚本中所以 NAME 都是 “data”

(3)数组

数值定义:array[index]   //index 从1开始,与C语言不同

//通过$#myarr来查看元素的个数;

set  array=(data1, data2, data3)     //array[1] = data1,  array[2] = data2;

unset array[1]       //删除data1

unset array          //删除整个数组

echo array[1]       //输出

(4)调用子脚本

在file.csh中调用 file2.csh 脚本:

source ./file2.csh //在file.csh中写 (5)环境变量

用 export 修饰的变量, 环境变量的传递是单向的,可以由子进程传递到父进程。

//用于传递参数

export envir="this is envir" (6)命令键入参数

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

命令行参数的个数为$#argv。

echo $1 // ./csh a 这里指第二个参数 a,第一个参数 ./csh 为 $0 // echo 指在命令行中 输出 (7)Cshell中的命令:

参考文献:Linux sed命令完全攻略(超级详细) (biancheng.net)

(1)find 命令 (2)sed 命令

sed 是流编辑器(Stream Editor),在shell 脚本 和 Makefile 中使用比较常见,把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一个格式输出。

作用:文本1 经过 sed + 脚本 的处理 生成 文本2

使用的两种方式:

sed option 'script' file1 file2            // sed 参数  ‘脚本文件’  待处理文件

sed option -f scriptfile file1 file2     // sed 参数 ’脚本文件‘   待处理文件

【1】option

-n  //默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。

-e  //允许多个脚本指令被执行

-i  //此选项会直接修改源文件,要慎用。

-f  //该选项会将其后文件中的脚本命令添加到已有的命令中

代码举例:

sed -n '2p' text.txt //只显示text.txt的第二行 【2】脚本命令

说明:脚本命令都是写在 'script' 中的

s  //substitution 替换

d  //delete  删除

i  //insert  插入

a  //append  追加

       s 替换脚本命令

此命令的基本格式为:[行数]s/需要替换的内容/替换的新内容/flags标记

flags 标记:

n   //1~512 之间的数字,表示指定要替换的字符串出现第几次时才进行替换,例如,一行中有 3 个 A,但用户只想替换第二个 A,这是就用到这个标记;

g  //对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作。例如,一行数据中有 3 个 A,则只会替换第一个 A;

p  //会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用。

w file   //将缓冲区中的内容写到指定的 file 文件中;

&     //用正则表达式匹配的内容进行替换;

\n   //匹配第 n 个子串,该子串之前在 pattern 中用 \(\) 指定。

\    //转义(转义替换部分包含:&、\ 等)

代码举例:

sed 's/123/567g' test.txt //将test.txt中所有的123替换为567 sed 's/test/trial/2' data.txt //将data.txt中的第二个test文件替换为trial         d 删除脚本命令

此命令的基本格式为:[行数]d [删除内容]

代码举例:

sed '2d' test.txt //将第二行删除         i 插入脚本命令        

此命令的基本格式为:[行数]i [插入内容]

代码举例:

sed '2i aaaaaa' text.txt //在text.txt 的第二行插入 aaaaaaa         a 追加脚本命令

此命令的基本格式为:[行数]a [插入内容]

代码举例:

sed '2a aaaaaa' text.txt //在text.txt 的第二行追加 aaaaaaa (3)awk 命令

sed 是以行为单位处理文件的,awk则是以 行和列 处理文件,所以功能更加强大。

awk 缺省的行分隔符是换行,缺省的列分隔符是连续的空格和tab,

使用的两种方式:

sed option 'script' file1 file2            // sed 参数  ‘脚本文件’  待处理文件

sed option -f scriptfile file1 file2     // sed 参数 ’脚本文件‘   待处理文件

最常见的用法就是过滤哪一列:

xxxxx | awk -F: '{print $3}'   //以 : 为列分隔符 打印第3列

cat /etc/passwd | awk -F: '{print $3}' //以 :为分隔符,打印第3列 awk '{print $2}' test.txt //打印test.txt 文件的第二列 【1】option

-n  //默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。

-e  //允许多个脚本指令被执行

-i  //此选项会直接修改源文件,要慎用。

-f  //该选项会将其后文件中的脚本命令添加到已有的命令中

【2】脚本命令(三种方式)

//'action'   直接写脚本

awk '{print $2}' test.txt //打印test.txt 文件的第二列

//' /定向/action'   有定向的脚本

awk '/^echo/{print $2}' test.txt //打印test.txt 文件含echo的第二列

//condition action 有条件的执行脚本

awk '$2=75 {print $0;}' testfile (4)grep 命令

(5)locate 命令

三、C shell 的运行与使用

(1)编写一个C shell 脚本: text.csh

(2)给予 text.csh 脚本文件 可执行权限, 因为编写的脚本文件 是没有可执行权限的

命令 : chmod a+x text.csh ( x 是 可执行权限)

或者 : chmod +x text.csh

(3) 执行脚本的方式:

【a】直接 ./文件名   :会产生子进程,父进程中 cd .. 命令不执行

        ./text.csh

【b】source ./文件名  : 逐一执行脚本命令,不会产生 子进程

        source ./text.csh



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有