shell程序设计(1)
2014-04-17 15:34
253 查看
shell程序设计(1)
管道和重定向
重定向
重定向输出
chen123@ubuntu:~/C++$ ls -l >lsoutput.txt这条命令把ls命令的输出保存到文件lsoutput.txt中。
文件描述符0代表一个程序的标准输入,文件描述符1代表标准输出,文件描述符2代表标准错误输出。在上面的例子中,通过>操作符把标准输出重定向到一个文件。默认情况下,如果该文件已经存在,它的内容将被覆盖。使用set –C命令设置noclobber选项,从而阻止重定向操作对一个已有文件的覆盖。也可以使用set +o noclobber或set -o noclobber开启或关闭noclobber选项。
我们使用>>操作符将输出内容附加到一个文件中,例如
chen123@ubuntu:~/C++$ ps >>lsoutput.txt
这条命令将ps的输出附加到指定文件的尾端。
如果需要对标准错误输出重定向,可以使用2>操作符。因为标准错误输出文件描述符是2,所以在>前面加上2。
下面这条命令是把标准输出和标准错误输出分别重定向到不同的文件中
chen123@ubuntu:~/C++$ kill -HUP 1234>killout.txt 2>killerr.txt
如果想把两组输出都重定向到一个文件中,可以用>&操作符来结合两个输出。
chen123@ubuntu:~/C++$ kill -l 1234 > killouterr.txt2>&1
这条命令将标准输出重定向到killouterr.txt,然后将标准错误输出重定向到与标准输出相同的地方。
可以直接使用UNIX的同样回收站/dev/null来有效地丢弃所以输出信息
chen123@ubuntu:~/C++$ kill -l 1234>/dev/null 2>&1
重定向输入
chen123@ubuntu:~/C++$ more < killerr.txt很明显,这样做一样不大,因为more可以直接接受文件名作为参数。
chen123@ubuntu:~/C++$ more killerr.txt
管道
在linux下通过管道连接的进程可以同时运行,并且随着数据流在他们之间的传递可以自动的进行协调。举一个例子我们可以使用sort命令对ps命令的输出进行排序。如果我们不使用管道,这就需要分几个步骤实现
chen123@ubuntu:~/C++$ ps > psout.txt
chen123@ubuntu:~/C++$ sort psout.txt >pssort.out
但如果使用管道更为精巧。
chen123@ubuntu:~/C++$ ps | sort >pssort1.out
如果想在屏幕上分页显示输出结果,我们可以在联结第三个进程more,将他们都放在同一个命令行上。
chen123@ubuntu:~/C++$ ps | sort | more
如果有一系列的命令需要执行,相应的输出文件是在这一组命令被创建的同时立刻被创建或写入的,所以决不要在命令流中重复使用相应的文件名。如果尝试执行如下命令
chen123@ubuntu:~/C++$ cat mydata.txt | sort| uniq | > mydata.txt
你最终将得到一个空文件,因为你在读取文件mydata.txt之前就已经覆盖了这个文件的内容。
作为程序设计语言的shell
编写shell脚本程序有两种方式。可以输入一系列命令让shell交互的执行它们,也可以把这些命令保存到一个文件中,然后将该文件作为一个程序来调用。交互式程序
假设我们查找包含字符串hello的文件,可使用下面的交互式脚本来执行整个操作:chen123@ubuntu:~/C++$ for file in *
> do
> if grep -l hello $file
> then
> more $file
> fi
> done
请注意,在输入shell命令的时候,shell提示符$会变成>符号。可以一直输入下去,由shell来判断何时输入完毕并立刻执行脚本程序。
创建脚本
首先用文本编辑器创建一个名为first的文件,其内容如下:#!/bin/sh
#first
#This file looks through all the files inthe current
#directory for the string hello, and thenprints the names of
#those files to the standard output.
for file in *
do
ifgrep -q hello $file
then
echo$file
fi
done
exit0
其中#!字符告诉系统同一行紧跟在它后面的那个参数是用来执行文本的程序。
exit命令的作用是确保程序能够返回一个有意义的退出码。
可以用file命令来检查文件是否是脚本程序。
chen123@ubuntu:~/C++$ file first
first: POSIX shell script text executable
执行脚本
运行脚本的方法有两种方法1:
chen123@ubuntu:~/C++$ /bin/bash first
方法2:
chen123@ubuntu:~/C++$ ./first
相关文章推荐
- Linux06--Shell程序设计02 数据流重定向与管道
- linux程序设计——shell程序设计(第二章)
- 几个shell程序设计小知识(shell常识部分)
- 实验四 shell程序设计: shell控制语句
- UNIX操作系统中Shell程序设计
- Linux程序设计读书笔记:第二章 shell程序设计
- shell程序设计小知识
- How Does Shell Script Looping Work?(shell程序设计中的循环)
- linux程序设计——shell程序设计(第二章)
- 第二章 shell程序设计(1)
- 设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,
- Shell程序设计
- Linux程序设计-学习笔记-第二章shell程序设计
- Shell程序设计小知识[shell常识部分]
- 鸟书shell学习(三)shell脚本程序设计要点总结
- 第二章 shell程序设计(3)
- Linux程序设计--shell程序设计基础(二)
- 第二章 Shell程序设计
- Shell 基础篇---介绍几个shell程序设计小知识
- Linux07--Shell程序设计03 通配符与正则表达式