Linux shell 编程

1. A shell is a program that acts as the interface between you and the Linux system, enabling you to enter commands for the operating system to execute.


各个应用程序在Linux系统中的位置关系,bash和csh是两种不同的Shell


2. bash是非常常用的shell,其全称是GNU Bourne-Again SHell


3. file descriptor 0 is the standard input to a program, file descriptor 1 is the standard output, and file descriptor 2 is the standard error output.


4. 将输入或输出重定向(Redirect)时,如果重定向的文件已经存在,那么默认行为是进行覆盖,比如ls -l > test会将ls -l的输出结果重定向到文件test中,如果test已经存在则会用新的文件覆盖它。可以利用set命令来更改此默认行为,即set -o noclobber(或set -C),则会将此默认行为更改为不覆盖已存在的文件。若取消该设置可以用使用set +o noclobber(或set +C)

使用>表示重定向,使用>>也表示重定向,只不过>>表示追加(append)内容,比如ls -l >> test会将ls -l的输出追加到文件test中。


5. 标准输出和标准错误输出是两个标准的输出管道(Pipe),它们默认是将内容输出到屏幕设备上,可以对它们进行重定向,比如重定向到一个普通文件(区别于设备文件),默认>和>>表示标准输出,等同于1>和1>>,因为标准输出的文件描述符是1,而如果要对标准错误输出进行重定向,则需要使用2>和2>>,比如rm file 2> test表示删除名为file的文件并将标准错误输出重定向到test文件中,如果file文件存在且可以删除,那么不会出现错误信息,则生成的test文件是空的,如果file不存在或不可删除,即rm执行出现错误,那么会生成错误信息(即在标准错误输出管道中有内容),则test文件中的内容是输出的错误信息,此时屏幕上不会出现错误信息。


kill -1 1234 >killouterr.txt 2>&1,这句话是将标准输出和标准错误输出重定向到同一个文件killouterr.txt中,&1可理解为去文件描述符1(即标准输出)的地址,因为标准输出已经重定向到killouterr.txt,所以此时可认为标准输出就是文件killouterr.txt。注意:>和&之间不能有空格!


6. more命令的含义是将文件(包括普通文件和设备文件)内容显示到终端上,每次一屏,按空格表示显示下一屏,按回车表示显示下一行。


7. Shell编程中,注释用#,类似于C++中的//,竖杠 | 表示管道操作符(pipe operator),该操作符可以将多个进程连接起来,它们共享管道,数据流从一个进程(比如某个命令运行后)传递到另一个进程并依次处理,比如 ps | sort | more,首先ps得到当前运行的进程信息,然后sort对这些信息进行排序,然后将排序后的信息分屏显示出来。

注意:虽然看起来它们之间好像是先后运行的,但其实它们是同时运行的,即同时运行并共享管道,比如 cat mydata.txt | sort | uniq > mydata,txt,该命令本意是想将mydata.txt中的内容经过排序和去重然后重定向到原来的文件中,但要注意这些进程都是同时运行的,且写文件(包括创建文件)的操作是在命令执行的同时就执行的,所以前面那条命令的结果会使得mydata.txt中的文件内容为空,即在使用cat读取mydata.txt文件内容之前就已经使用重定向符覆盖了这个文件的内容,所以在一条命令流中不能重复使用相同的文件名,这会造成不可预料的后果。


8. 





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值