”” 表示的是输入重定向的意思,就是把后面跟的文件取代键盘作为新的输入设备。
创新互联公司主要从事成都网站设计、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务常宁,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
”| ”则表示一个管道的意思,可以理解为东西从管道的一边流向另外一边。
程序呢? 简单的说shell程序就是一个包含若干行
shell或者linux命令的文件.
象编写高级语言的程序一样,编写一个shell程序需要一个文本编辑器.如VI等。
在文本编辑环境下,依据shell的语法规则,输入一些shell/linux命令行,形成一个完整
的程序文件.
执行shell程序文件有三种方法
(1)#chmod +x file(在/etc/profile中,加入export PATH=$:~/yourpath,就可以在命令行下直接运行,像执行普通命令一样)
(2)#sh file
(3)# . file
(4)#source file
在编写shell时,第一行一定要指明系统需要那种shell解释你的shell程序,如:
#! /bin/bash,
#! /bin/csh,/bin/tcsh,
#! /bin/pdksh .
2.shell中的变量
定义变量
shell语言是非类型的解释型语言,不象用C++/JAVA语言编程时需要事先声明变量.给一
个变量赋值,实际上就是定义了变量.
在linux支持的所有shell中,都可以用赋值符号(=)为变量赋值.
如:
abc=9 (bash/pdksh不能在等号两侧留下空格 )
set abc = 9 (tcsh/csh)
由于shell程序的变量是无类型的,所以用户可以使用同一个变量时而存放字符时而存放
整数.
位置变量
当运行一个支持多个命令行参数的shell程序时,这些变量的值将分别存放在位置变量里.
其中第一个参数存放在位置变量1,第二个参数存放在位置变量2,依次类推...,shell保留
这些变量,不允许用户以令外的方式定义他们.同别的变量,用$符号引用他们.
1、输入输出的区别:
和都属于输出重定向,属于输入重定向。
2、文件内容的区别:
会覆盖目标的原有内容。当文件存在时会先删除原文件,再重新创建文件,然后把内容写入该文件;否则直接创建文件。
会在目标原有内容后追加内容。当文件存在时直接在文件末尾进行内容追加,不会删除原文件;否则直接创建文件。
输出重定向:将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的)重定向其它输出设备(文件,打开文件操作符,或打印机等等)。
输入重定向:命令默认从键盘获得的输入,改成从文件,或者其它打开文件以及设备的输入。
扩展资料
当执行shell命令时,会默认打开3个文件,每个文件有对应的文件描述符来方便我们使用:
当使用输出重定向和前面如果不加数字则默认为1,即和1,和1分别相同。如果使用数字2可以将错误的输出写入到文件中。使用2或者2时前面必须是错误的命令。
一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
文件描述符为0,小于号表示数据由文件流入命令
usage:
命令 file
#加入输入重定向,对输入文件进行计数
wc -l /etc/passwd
文件描述符为1,大于号表述数据由命令流入文件
所以: echo "hello" t.log 也可以写成 echo "hello" 1 t.log
会把文件的内容清空,再输入到新的文件
会把当前内容保持不变,然后在下一行进行追加
2 错误重定向,如果当前命令产生了错误,会把错误重定向到文件中,而不会打印到屏幕
无论内容正确还是错误都会把文件输出到文件中。
stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
默认情况下, command file 将stdout 重定向到 file, command file 将stdin 重定向到 file。
如果希望 stderr 重定向到 file,可以这样写:
$ command 2file
如果希望 stderr 追加到 file 文件末尾,可以这样写:
$ command 2file 2 表示标准错误文件(stderr)
如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:
$ command file 21 或者 $ command file 21
如果希望对 stdin 和 stdout 都重定向,可以这样写:
$ command file1 file2
command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。
含义:将标准错误输出 重定向到 标准输出。
符号是一个整体,不可分开,分开后就不是上述含义了。
比如有些人可能会这么想:2是标准错误输入,1是标准输出,是重定向符号,那么"将标准错误输出重定向到标准输出"是不是就应该写成"21"就行了?是这样吗? 如果是尝试过,你就知道21的写法其实是将标准错误输出重定向到名为"1"的文件里去了
就是将后面的内容作为前面命令的标准输入
grep a "$VARIABLE" 意思就是在VARIABLE这个变量值里查找字符a
这个是将输出内容追加到目标文件中。如果文件不存在,就创建文件;如果文件存在,则将新的内容追加到那个文件的末尾,该文件中的原有内容不受影响
将分界符之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符,shell就知道输入结束了,例如
fish@mangos:~$ cat EOF
First Line
Second Line
Third Line EOF
EOF
First Line
Second Line
Third Line EOF