shell学习——(二)

帅比萌擦擦* 提交于 2020-01-21 19:37:46

接着上一章,shell的基本概念介绍完后,具体介绍一些实用和常用的shell内建命令。

一、echo

echo将参数打印到标准输出,参数之间以一个空格隔开,并以换行符结尾。
例如,$ echo "Enter your name: "这里引号可以不用

二、printf

printf可以输出简单的字符串,例如
printf “Hello, world\n”
不同于echo,它不会自动提供一个换行符号。你必须显示地将换行符号指定成\n。

printf format-string [arguments ...]

第一部分是一个字符串,用来描述输出的排列方式,最好为此字符串加上引号。此字符串包含了按字面显示的字符以及格式声明,后者是特殊的占位符,用来描述如何显示相应的参数。
例如
$ printf “The first program always prints ‘%S, %S!’\n” Hello world

三、 基本的I/O重定向

标准输入/输出:程序应该有数据的来源端,数据的目的端以及报告问题的地方,它们分别为标准输入、标准输出和标准错误输出。
默认的标准输入、标准输出以及标准错误输出都是终端。
例如$ cat

now is the time  #用户键入
now is the time  # 由cat返回

重定向与管道
shell使用数种于发表基,改变默认的来源端与目的端。
以<改变标准输入
例如, program < file 可将program的标准输入修改为file:
tr -d ‘r’ < dos-file.txt …
以>改变标准输出
program > file 可将program的标准输出修改为file:

    tr -d '\r' < dos-file.txt > UNIX-file.txt
    #tr将dos-file.txt里的ASCII carriage-return删除,再将转换完成的数据输出到UNIX-file.txt.dos-file.txt里的原始数据不会有变化。
   ***重定向符号>在目的文件不存在时,会新建一个。然而如果目的文件已存在,它就会被覆盖掉,原本的数据就会丢失。***

**以>>附加到文件**
    program >> file可将program的标准输出附加到file的结尾处
    如果目的文件不存在,>>重定向便会新建一个。然而,如果目的文件存在,它会直接覆盖掉文件,而是将程序所产生的数据附加到文件结尾处。
**以 | 建立管道**
    program1 | program2可将program1的标准输出修改为program2的标准输入。
    
    虽然<和>可将输入与输出连接到文件,不过管道可以把两个以上执行中的程序衔接在一起。第一个程序的标准输出可以变成第二个程序的标准输入。这么做的好处是,管道可以使得执行速度比使用临时文件的程序快上十倍。
    例如:
  

```bash
      tr -d  '\r' < dos-file.txt | sort > UNIX-file.txt

访问shell脚本的参数
在shell中,位置参数就是shell脚本的命令行参数。在shell函数里,它们同时也可以是函数的参数。各参数都由整数来命名。当它超过9就应该用大括号把数字框起来:

   echo first arg is $1
   echo tenth arg is $(10)
   $ cat > finduser
   #! /bin/sh
   # finduser
whos | grep $1

$ chmod +x finduser
$ ./finduser betsy

shell中使用#作为注释的开头,使用数值可以帮助你或者其他人在一年以后还能够了解你在做什么以及为什么要这么做。等我们觉得程序能够运行无误时,就可以把它移到个人的bin目录中。
简单的执行跟踪
使shell显示每个被执行到的命令,并在前面加上’+'号:一个加号后面跟着一个空格。
例如:

    $ cat  >  tracel.sh
    #! /bin/sh
    set -x
    echo 1st echo
    
    echo +x 
    echo 2nd echo
    
    $ chmod +x tracel.sh
    $ ./tracel.sh
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!