C Shell 详解

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 {printf "%s\t%s\n", $0, "REORDER";} $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

"Shell三剑客"指的是在Linux/Unix系统下使用最广泛的三个命令行工具:grep、sed和awk。它们都是文本处理工具,可以用于快速搜索、替换和处理大量文本数据。 1. grep:用于在文件中搜索指定的文本模式,并将匹配的行打印出来。常用的选项包括: - -i:忽略大小写。 - -r:递归地搜索目录中的所有文件。 - -v:输出未匹配的行。 - -w:只匹配整个单词,而不是部分匹配。 示例:搜索包含特定单词的行,例如:`grep "hello" file.txt` 2. sed:用于在文件中进行文本替换和编辑操作。它可以通过正则表达式来查找和替换文本,并且可以将修改后的内容输出到屏幕或保存到文件中。常用的选项包括: - -i:直接修改文件,而不是输出到屏幕。 - -e:在命令行中指定多个编辑命令。 - -n:不输出模式空间的内容。 示例:将文件中所有的"foo"替换为"bar",并将修改后的内容保存回原文件中:`sed -i 's/foo/bar/g' file.txt` 3. awk:用于处理文本文件的数据,可以将文件的内容分割成多个字段,并可以对每个字段进行操作。它使用类似于C语言的语法,并且可以通过条件和循环来过滤和处理数据。常用的选项包括: - -F:指定分隔符。 - -v:定义变量。 - -f:指定脚本文件。 示例:将文件中第一列数字相加,并输出总和:`awk '{sum += $1} END {print sum}' file.txt` 这些命令通常被组合使用,以便快速处理文本数据。例如,使用grep查找文件中特定的文本模式,然后使用sed对文本进行替换,最后使用awk对数据进行分析和汇总。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值