美文网首页Linux Shell
19. Linux Shell 常用小命令

19. Linux Shell 常用小命令

作者: 姜淑均 | 来源:发表于2017-09-05 01:53 被阅读13次

    1. “:” 命令

    Shell命令总是有一些奇怪的命令符,比如之前看到的“[”;这里又来了一个。你没有看错,“:”这货也是有特殊含义的。
    在shell中 “:”是true的别名,就是表示真,如以下代码:

    #!/bin/bash
    
    if : # 有木有看到
    then
        echo ": is true"
    fi
    
    if true 
    then
        echo "true is true"
    fi
    

    就是这样的了,由于“:”是内置命令,所以它的运行速度比true快。

    2. eval命令

    eval命令允许对参数进行求值,它的格式如下:

    eval [arg ...]
    

    把参数当做一个Shell命令来执行。这是对eval最简单的解释了。eval命令会将参数连接为一个整的字符串,然后将这个字符串作为一个新的Shell输入进行执行。
    当我们将一些字符串作为eval的参数时,Shell在执行整个eval命令时,它会对eval命令的参数进行两次扫描。例如以下示例代码:

    #!/bin/bash
    
    a=10
    x=a
    
    eval y='$'$x
    echo $y
    
    exit 0
    

    在eval执行的过程中,先对y='$'$x进行第一次扫描,得到y=$a;然后再进行第二次扫描,也就是执行y=$a,得到了y=10;当执行echo $y的时候,就输出结果10。

    3. exit n命令

    exit命令使脚本以退出码n结束运行。如果允许自己的脚本程序在退出时不指定一个退出状态,那么该脚本中最后一条被执行命令的状态将被用作为返回值。在脚本程序中提供一个退出码总是一个良好的习惯。

    在Shell脚本编程中,退出码0表示成功,退出码1~125是脚本程序可以使用的错误代码。其余数字具有保留的含义,具体请Google。

    可以使用$? 来读取shell的退出码
    注意:$?只能用一次,第二次再用$?时结果就是上次$?的返回值,其实就是0

    4. expr命令

    expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。以下通过实际的简单代码来看看expr的使用。

    #!/bin/bash
    # 获取字符串的长度
    expr length "http://www.jellythink.com"
    
    #截取子串
    expr substr "http://www.jellythink.com" 12 21
    
    #整数运算
    
    var=`expr 10 / 2`
    echo $var
    
    var=$(expr 10 \* 2)
    echo $var
    
    exit 0
    

    在上面的脚本中,使用了反引号(`),使用了该引号,就可以使expr的执行结果赋值给var变量,当然了,我们在脚本中也看到了$()来替换反引号的用法,这都是可以的。
    expr命令的功能比较简单、单一,但是很强大。但是需要注意的是,在进行乘法运算时,如果写成:

    expr 10 * 2
    

    这样就会报错,这是由于*号在Shell有特殊意义,我们需要加上转义字符\。

    5. set命令

    set命令作用主要是显示系统中已经存在的shell变量,以及为已经存在的shell变量设定新的值。使用set更改shell特性时,符号”+”和”-“的作用分别是打开和关闭指定的模式。set命令不能够定义新的shell变量。如果要定义新的变量,可以使用declare命令以变量名=值的格式进行定义即可。
    当使用set命令不带任何参数时,它会输出系统中已经存在的所有Shell变量;我们可以使用set设置我们本地的Shell变量,当退出Shell时,这些本地的Shell变量就会失效,如果需要永久的保存这些Shell变量,则需要写入配置文件中。

    6. return命令

    return命令的作用是使函数返回。return命令有一个数值参数,这个参数在调用该函数的脚本程序中被看做是该函数的返回值;如果没有指定参数,return命令默认返回最后一条命令的退出码。

    7. shift命令

    shift命令把所有参数变量左移一个位置,使2变成1,3变成2,以此类推;而2占领1的位置之后,原来$1的值就会被丢弃。

    在扫描处理脚本程序的时候,经常要用到shift命令。如果你的脚本命令程序需要10个或10个以上的参数,我们就需要使用shift命令来访问第十个及其后面的参数。

    8. trap命令

    trap命令用于指定在接收到信号后将要采取的行动。trap命令的一种常见用途是在脚本程序中断时完成清理工作。在Linux系统中定义了许多信号,它们被定在头文件signal.h中,在使用信号名时需要省略SIG前缀。我们在命令行下可以使用trap -l查看所有的信号量定义,及其对应的数字。
    trap有两个参数,第一个参数是接收到指定信号时将要采取的行动,第二个参数是要处理的信号名。格式如下:

    trap command signal
    

    下面就通过一个简单的实例来学习一下trap命令的使用,代码如下:

    # !/bin/bash
    
    # 当按下ctrl+c触发中断信号以后,就删除临时文件
    trap 'rm -f /tmp/my_tmp_file_$$' INT
    echo creating file /tmp/my_tmp_file_$$
    date > /tmp/my_tmp_file_$$
    
    echo "Press interrupt (ctrl + c) to interrupt..."
    while [ -f /tmp/my_tmp_file_$$ ]
    do
        echo file exists
        sleep 1
    done
    
    echo file is no longer exists
    
    #取消INT信号对应的处理
    trap INT
    echo creating file /tmp/my_tmp_file_$$
    date > /tmp/my_tmp_file_$$
    
    echo "Press interrupt (ctrl + c) to interrupt..."
    while [ -f /tmp/my_tmp_file_$$ ]
    do
        echo file exists
        sleep 1
    done
    
    echo I never get here
    exit 0
    

    当按下ctrl + c组合键时,就会触发INT中断,然后就会删除创建的临时文件。

    9. unset命令

    unset命令的作用是从环境中删除变量或函数,这个命令不能删除shell本身定义的只读变量。

    10. 命令的执行

    我们在编写脚本的时候,经常需要捕获一条命令的执行结果,然后将这个结果保存在另一个变量中。在总结expr命令时,说到可以使用`符号。是的,不错,使用反引号确实可以完成,但是我们更建议使用$(command)来完成这项工作。
    $(command)的结果就是其中命令的输出。注意,这不是该命令的退出状态,而是它的字符串形式的输出结果。比如以下脚本代码:

    x=$(date)
    echo $x
    

    我们将date命令的输出结果保存在x变量中,然后就可以输出对应的结果。
    这种把命令的执行结果存储到变量中的功能是巨大的,它使得在脚本程序中使用现有命令并捕获其输出变得很容易;这样我们可以配合xargs命令,将标准输出作为另一个程序的参数。

    转自:http://www.jellythink.com/archives/785

    相关文章

      网友评论

        本文标题:19. Linux Shell 常用小命令

        本文链接:https://www.haomeiwen.com/subject/fzwyjxtx.html