zoukankan      html  css  js  c++  java
  • shell命令

    &&

        command1 && command2 [&& command3 ...]
        只有在&&左边的命令返回真时,&&右边的命令才会被执行下去
        只要有一个命令返回假,后面的命令就不会被执行
        想:所有&&连接的条件,只要发现有一个假的话,就不必要执行下去了,因为最终结果肯定是假。
        注:命令返回值 $? == 1表示假,命令返回值 $? == 0 表示真

       
    ||

        command1 || command2 [|| command3 ...]
        只有左||左边返回假的时候,||右边的命令才会执行
        只要有一个命令返回真,后面的命令就不会被执行
        想:所有||连接的条件就是一个或功能,有一个真那就是真


    &

        &放在启动参数后面表示设置此进程为后台进程,与&&完全不一样的意义
        command1 &
        默认情况下,进程是前台进程,这时就把Shell给占据了,
        我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&'实现这个目的


    |

        人称管道符
        上一条命令的输出,作为下一条命令参数
        command1 | command2
        # cat /etc/passwd | grep /bin/bash | wc -l
        第一个管道将cat命令(显示passwd文件的内容)的输出送给grep命令,
        grep命令找出含有“/bin /bash”的所有行;
        第二个管道将grep的输出送给wc命令,
        wc命令统计出输入中的行数。这个命令的功能在于找出系统中有多少个用户使用bash

        
    ;

        command1 ; command2
        ;将命令分隔,每个命令都会从左到右顺序执行。彼此之间没有关系,所有命令都会执行到


    > <

        > 和 < 分别代表重定向的方向,是从左到右还是从右到左

    >> <<

        >> 和 << 代表追加,也就是不改变重定向目标文件原有的内容,追加在后面


    &>
     
        /dev/null 表示空设备文件;
        0 表示stdin标准输入;
        1 表示stdout标准输出;
        2 表示stderr标准错误。
        &>  比 >多了一个字符 ,当我们想用>重定向到一个文件时,如果左边的是标准输出,那就能成功。
        但如果左边是一个报错,那我们就会在屏幕上看到报错信息,而文件中并没有东西输出。
        但如果前面加上&,就会将报错转化为标准输出重定向到文件中而不会在屏幕输出

        
    cd - 

        cd - 
        返回切换前的目录

    2>&1

        /dev/null 表示空设备文件;
        可以把/dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.
        0 表示stdin标准输入;
        1 表示stdout标准输出;
        2 表示stderr标准错误。    
        2>&1 的意思就是将标准错误重定向到标准输出
        eq:解读 ls ** >out.txt 2>&1
            上面相当于 ls ** 1>out.txt 2>&1
            执行 ls ** 如果产生标准输出(1),那么结果会到out.txt中去;如果产生错误输出(2),那么结果会到标准输出(1)中去,
            因为标准输出(1)是到out.txt中去的,所以错误输出(2)也会到out.txt 中去
        这么说来 ** &>/dev/null     应该等价于 ** >/dev/null 2>&1

        
    $0

        当前脚本的文件名

     
    $n

        传递给脚本或函数的参数。n 可以是1、2、3...任何一个参数,数字是几就表示第几个参数


    $#

        传递给脚本或函数的参数的个数


    $*

        传递给脚本或函数的所有参数


    $@

        传递给脚本或函数的所有参数。
        被双引号包含时会与$*有所不同:"$*" 会将所有的参数作为一个整体,
        以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数


    $?

        上个命令的退出状态或是函数的返回值


    $$

        当前Shell进程的ID。对于Shell脚本来说就是这些脚本所在的进程ID


    [] [[]]

        [] 是 test 命令的简写 。[command] 等价于 test command 
            必须在左括号的右侧和右括号的左侧各加一个空格,否则会报错
            大于符号或小于符号必须要转义,否则会被理解成重定向
        [[]]是[ ]的针对数学比较表达式和字符串表达式的加强版

  • 相关阅读:
    Codeforces 858B
    区域赛前立FLAG
    GCJ Practice Contest
    UVa 10004 Bicoloring
    UVa 784 Maze Exploration
    Pacemaker+ISCSI实现Apache高可用-环境准备
    多机免密互信
    HAPROXY + Keepalived
    LVS+KEEPALIVED
    oracle-数据库被注入恶意攻击程序的案例恢复
  • 原文地址:https://www.cnblogs.com/wmh33/p/10023258.html
Copyright © 2011-2022 走看看