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 
        必须在左括号的右侧和右括号的左侧各加一个空格,否则会报错
        大于符号或小于符号必须要转义,否则会被理解成重定向
    [[]]是[ ]的针对数学比较表达式和字符串表达式的加强版

原文地址:https://www.cnblogs.com/wmh33/p/10023258.html