• shell学习1---基本的shell命令


    基本脚本

    反引号:

    ``  反引号里面的内容是命令行,通过反引号用户可以将shell命令的输出赋给变量,比如:

    test=`date +%y%m%d`

    echo “The time is :” $test

    重定向:

    输出重定向:

    就是将shell命令的输出结果发送到一个文件里面

    格式:command >  file

    如果目标文件里面已经有内容了,那么会将原有的内容清除并添加新内容,如果不想改动原来文件的内容,就将“>”换成”>>”,表示追加

    输入重定向:

    和输出重定向相反,它是把文件的内容重定向给命令进行操作

    格式:command  <   file

    比如有一个文件test,我们要在终端中将里面的内容排序之后输出在终端上

    sort  <  test

    ”<<”称为内联输入重定向,这种方法允许你在命令行而不是在文件指定输入重定向的数据,其实也就是将前面输入重定向的file换成了你在终端输入的数据

    当用户在最后输入了EOF,那么就会终止操作

    格式:

    command  <<  marker

    data

    marker

    wc  <<  EOF

    >test  string  1

    >EOF

    这样就会输出test文本中行数、词数(第一行)、字节数(第一行)

    为了更好理解重定向,先了解一下标准文件描述符

    文件描述符 缩写 描述
    0 STDIN 标准输入
    1 STDOUT 标准输出
    2 STDERR 标准错误

    在使用输入重定向”<”的时候,Linux会用重定向指定的文件来替换标准输入文件描述符,它会读取文件并提取数据,就好像是用户在键盘输入数据一样

    比如,我们cat  的时候,它会接收STDIN的输入,当用户每行输入一段数据,数据会马上输出在终端。当我们输入cat  <  file的时候,就是把file中的每行数据作为输入,然后cat出来.

    实际上1>就等同于>

    重定向错误和数据

    利用1>符号将命令本该输出到STDOUT的正常输出重定向到该符号后面加的文件,利用2>可以将本该输出到STDERR的错误信息重定向到该符号后的文件,两个符号可以同时使用

    cat  test  2>  test1  1>  test2

    当使用&>符号的时候,命令生成的所有输出都会发送到同一位置,包括了错误和数据。&表示等同于,2>&1就是表示2的输出重定向等同于1标准输出

    file  2>1:如果没有file这个文件就把错误输出到文件1中

    2>&1  >file:错误输出到终端,标准输出被重定向到文件file中。&和1结合可以分析为标准输出,然后加上前面的>2就是代表错误重定向到标准输出

    >file  2>&1标准输出被重定向到文件file,然后错误输出也重定向到和标准输出一样,也是输出到文件file中,其实这样的效果就像&>那样。那么为什么不直接用>file  2>file呢,这是因为这样操作之后标准输出和标准错误输入到文件file之后会形成相互覆盖的结果。而且,这样的操作相当于开了两个互相竞争使用文件file的管道,如果按照前面那样操作就只开一个管道,但是已经包含了标准输出和标准错误,有更高的效率

    >file  2>&1  &:和前面不加&的效果类似,最后一个&是为了命令在后台中运行

    >/dev/null  2>&1:等同于1>/dev/null  2>/dev/null,默认情况下是1(标准输出)。这里的含义就是:标准输出重定向到/dev/null,而标准错误又被重定向到标准输出,因此标准输出和标准错误都重定向到/dev/null其实就等同于&>  /dev/null。/dev/null实际上是一个黑洞文件,任何内容输入到这里都会被销毁

    2>&1  >/dev/null:标准错误输出到终端,而标准输出不输出在终端

    思考一下前面为什么有的要将2>&1放在后面

    command  file  2>&1是标准错误拷贝了标准输出的行为,也就是同样重定向到file中,最后的结果就是将标准输出和标准错误都重定向到file中

    command  2>&1  >file也是标准错误拷贝了标准输出的行为,但是由于前面没有加文件,此时的标准输出还是在终端,当使用了>file之后才重定向到file,但是标准错误还是在终端输出

    总结一下:当2>&1出现在file前面,那么就是将标准错误输出到终端而标准输出输出到file,当2>&1出现在file后,那么就是将标准输出和标准错误都输出到file

    管道符

    使用管道符,可以将管道符前一个命令的结果作为输入传递给管道符后的命令

    脚本退出

    $?专属变量用来保存上个执行的shell命令的退出状态

    成功执行之后返回0,失败返回127(没找到命令)。其他一些状态码:

    状态码 描述
    1 通用未知错误
    2 错误使用shell命令
    126 命令不可执行
    128 无效的退出参数
    128+x Linux信号x的严重错误
    130 命令是通过ctrl+c退出
    255 退出状态码越界

    当在exit命令的结尾加入参数,输出$?的时候就是前面这个参数

    运算

    shell运算相关的命令有expr

    比如expr  1+2

    但是有时候就要转义,比如expr  1*3会报错,要用expr  1*3

    所以为了避免这些麻烦,用户可以使用方括号将运算表达式包含起来,比如

    $var=$[1+2]

    echo  $var

    $var2=$[$var*3]

    echo $var2

    前面的运算都是基于整型的,浮点运算的解决要引入bc命令

    输入bc的时候会弹出一些欢迎信息,如果要取消,输入bc  -q。退出bc要输入quit

    demo:

    echo $(val=`echo “scale=3;3.3/4”  | bc`

    Technorati Tags:

    参考:http://blog.csdn.net/ithomer/article/details/9288353

  • 相关阅读:
    网站优化记录
    在pc游览器端模拟移动端幻灯片
    jquery消息提示框
    开发jquery tab 插件
    js检测是否安装了flash插件
    javaweb项目下解决360兼容模式不能下载文件问题
    简单的excel上传解析和错误反馈信息下载
    sqlserver带游标存储过程及调用函数
    oracle带游标存储过程编写
    简单的spring+dubbo提供和消费方
  • 原文地址:https://www.cnblogs.com/simonid/p/6511493.html
Copyright © 2020-2023  润新知