shell脚本【符号2】I/O重定向相关符号

本篇博客用于介绍I/O重定向相关的符号和操作

 I/O重定向符号:>   <    >>    2>   1>   &1   &>

一.概念:

        标准输入重定向:就是把命令的输入从默认的从键盘读取,重定向到一个文件: <file。

        标准输出重定向:就是把命令的标准输出保存到指定的文件内:>file   >>file   1>file。

        标准错误输出重定向:把命令的错误输出保存到指定文件内:2>file   2>>file。

        标准错误输出和标准输出均重定向到同一个文件的操作:

        1>file 2>&1  或   &>file   或  &>>file (其中>和>>的区别就是一个覆盖文件原内容,一个不覆盖。并且注意,是没有2>>&1这种写法的。        

二.区分:

     标准输出和标准错误输出不是包含关系,是两个独立的输出。标准输出是输出正常显示信息,标准错误输出是输出出错信息。

     命令、shell脚本、判断(循环)语句块、shell函数等等,一切中间可以嵌套echo语句的或者本身就有输出的命令语句,都可以进行标准输入、标准输出、标准错误输出的I/O重定向。(可能这句话没有那么准确)

三.重定向过程:

       系统会打开一个默认的文件,用于标准输入、标准输出、标准错误输出指向文件。

       重定向后,系统会先关闭原指向文件,打开新文件,并把打开这个文件产生的指针重新装入进程文件表中。此时,文件描述符就更改了,更改为了指向新打开的这个文件的指针。所以,此时再用&1引用这个描述符,就是代表新打开的这个文件,而不是原系统默认文件。

        需要注意的是:在重定向的时候,就已经对文件进行了操作。          如“>file”:在重定向后,file的内容就已经清空了,这在重定向这一步已经发生,而此时,命令行还没有执行。(命令解析过程:点击打开链接

        你也可以对比下面的例①。当重定向写法:>OriginalFile  1>TestFile时,虽然最后把标准输出定向到了TestFile。但是在定向到TestFile之前,是先定向到OriginalFile,然后又一次重定向到的TestFile。所以,OriginalFile的内容已经先一步被清空。

四.如何输出

        提问:有没有办法,让输出信息既打印进文件,同时又输出到终端呢?

        答案:有。

        方法1:tee命令。

        例如:bash test | tee filename

        分析:bash test命令的输出结果,通过管道传递给tee命令。tee命令一边把标准输出打印进文件filename,一边就输出信息到屏幕。(注意的是,管道不能传递标准错误输出点击打开链接

        方法2:/dev/tty

        这种方法,如果重定向了脚本的标准输出和标准错误输出,通过>/dev/tty,可以将输出信息仍然能够送到用户的终端窗口,但是注意:输出到终端的这一句信息,不会再保存到文件内

        顺便讲一下命令:exec,这个命令有两种用法,我们今天只讲它重定向的功能。

        exec命令加在脚本中,可以使这个脚本中其随后的所有命令的标准输入、标准输出、标准错误输出重定向。

        脚本例子test:

                echo hello
                exec >filename 2>errfilename       #exec命令加在这里,只对下面的所有命令有效果
                echo chenhaojie >/dev/tty          #加了exec命令后,如果想输出中间的某一句,可以使用这种方式
                echo WUST                          #由于exec的作用,打印到filename文件,而不是终端

        执行:bash test

        终端屏幕输出;hello 

                              chenhaojie

       

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是常见的shell脚本符号大全: 1. #:注释符号,用于在脚本中添加注释。 2. $:变量符号,用于引用变量的值。 3. ;:命令分隔符,用于分隔多个命令。 4. &:后台运行符号,用于将命令放到后台运行。 5. *:通配符号,用于匹配任意字符。 6. ?:通配符号,用于匹配单个字符。 7. []:通配符号,用于匹配指定范围内的字符。 8. {}:花括号符号,用于批量处理文件名。 9. ():圆括号符号,用于定义函数或子shell。 10. |:管道符号,用于将一个命令的输出作为另一个命令的输入。 11. >:重定向符号,用于将命令的输出重定向到文件中。 12. >>:追加重定向符号,用于将命令的输出追加到文件中。 13. <:输入重定向符号,用于将文件的内容作为命令的输入。 14. <<:Here文档符号,用于将多行文本作为命令的输入。 15. &&:逻辑与符号,用于连接两个命令,当第一个命令执行成功时才执行第二个命令。 16. ||:逻辑或符号,用于连接两个命令,当第一个命令执行失败时才执行第二个命令。 17. !:逻辑非符号,用于对命令的结果进行取反。 18. ` `:反引号符号,用于将命令的输出作为变量的值。 19. $( ):命令替换符号,用于将命令的输出作为变量的值。 20. \:转义符号,用于将特殊字符转义为普通字符。 ### 回答2: Shell脚本是一种在Linux和Unix操作系统上编写的脚本语言,用于自动化和执行特定任务。在编写Shell脚本时,我们会经常使用各种符号来实现不同的功能。下面是常见的Shell脚本符号大全: 1. #号:用于注释,跟在#后面的文本将被忽略。 2. $符号:用于表示变量,例如$PATH表示环境变量PATH的值。 3. ():圆括号用于分组,例如(a && b) || (c && d)表示如果a和b都为真,或者c和d都为真,则条件成立。 4. {}:大括号用于扩展表达式,例如echo {a,b,c}表示打印a、b和c。 5. []:中括号用于条件测试,例如[ -f file ]表示测试文件file是否存在。 6. ;号:用于分隔命令,例如echo "hello"; echo "world"表示分别打印“hello”和“world”。 7. ||和&&:用于逻辑运算,例如a || b表示如果a为假则执行b,a && b表示如果a为真则执行b。 8. |:用于管道,将一个命令的输出传递给下一个命令作为输入,例如ls | grep test表示在当前目录下查找包含“test”字符串的文件。 9. *和?:用于通配符匹配,*表示匹配任意字符,?表示匹配一个字符,例如ls *.txt表示列出当前目录下所有以“.txt”结尾的文件。 10. \:用于转义符号,例如echo \$PATH表示打印字符“$PATH”。 11. ”和’:用于引用字符串,单引号表示不做任何处理,双引号表示可以处理转义符号和变量替换,例如echo "My name is $NAME"表示打印“My name is”和$NAME的值。 12. <<和>>:用于重定向输入/输出,<<表示从标准输入中读取数据,>>表示将输出写入文件,例如cat << EOF > file.txt表示将标准输入的全部内容写入file.txt。 以上是一些常见的Shell脚本符号,掌握它们可以帮助我们更方便、高效地编写Shell脚本。 ### 回答3: Shell脚本是一种程序语言,与其他编程语言一样,有其特有的语法和符号。了解这些符号的意义和用法,可以帮助开发者更方便、快捷地编写Shell脚本。下面我们来介绍重要的shell脚本符号大全。 1. # ! 这两个符号组合在一起构成了Shebang,用来声明当前脚本使用的解释器。例如,#!/bin/bash表示当前脚本使用bash解释器来执行。 2. ; 分号用于分隔两个命令,表示前面的命令执行完之后,才执行后面的命令。 3. $ $符号Shell脚本中使用最多的符号,有多种用法: - $变量名:表示取出该变量的值。 - $@:表示所有传入脚本的参数,以空格为分隔符。 - $?:表示上一个执行的命令的返回值。0表示成功,非0表示失败。 - $$:表示当前Shell脚本的进程ID。 4. ` ` 或 $( ) 这两个符号可以用来执行命令,并将命令的结果赋值给变量。 例如,`date +%Y-%m-%d`会执行date命令,将当前日期以“年-月-日”的格式输出给调用者。 5. {} 花括号可以用来表示字符串的一个片段或者一个代码。例如: - ${变量名}:表示将该变量替换为其值。 - {命令1; 命令2}:表示将多个命令作为一个代码执行。 6. [] 中括号可以用来表示条件判断和字符匹配。例如: - [条件]:表示判断给定的条件是否正确。 - [字符1=字符2]:表示判断两个字符是否相等。 7. [] 小括号可以用来表示数学运算和子进程。例如: - ((a + b)):表示a加b的结果。 - $(命令):表示执行一个子进程,并将子进程的输出赋值给变量。 8. * 星号可以用来表示通配符,表示匹配任意字符。 例如,*.txt表示匹配所有后缀为txt的文件。 9. \ 反斜杠可以用来转义特殊字符。例如,echo \$a会输出$a,而不是a的值。 以上是Shell脚本中重要的符号大全。希望大家在编写Shell脚本时能够熟练使用这些符号,提高编程效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值