zoukankan      html  css  js  c++  java
  • Shell脚本中$0、$?、$!、$$、$*、$#、$@等的意义以及linux命令执行返回值代表意义

    Shell脚本中(0、)?、(!、)(、)*、(#、)@等的意义以及linux命令执行返回值代表意义

    Shell脚本中(0、)?、(!、)(、)*、(/#、)@等的意义说明

    简要说明

     ps: 你在Linux环境下多试下就明白了
    $$
    Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)
    $!
    Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)
    $?
    最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
    $-
    显示shell使用的当前选项,与set命令功能相同
    $*
    所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个。
    $@
    所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
    $@ 跟$*类似,但是可以当作数组用
    $#
    添加到Shell的参数个数
    $0
    Shell本身的文件名
    $1~$n
    添加到Shell的各参数值。$1是第1参数、$2是第2参数…。 
    

    脚本举例

     我们先写一个简单的脚本,执行以后再解释各个变量的意义
    # touch variable
    # vi variable
    脚本内容如下:
    #!/bin/sh
    echo "number:$#"
    echo "scname:$0"
    echo "first :$1"
    echo "second:$2"
    echo "argume:$@"
    保存退出
    赋予脚本执行权限
    # chmod +x variable
    执行脚本
    # ./variable aa bb
    number:2
    scname:./variable
    first: aa
    second:bb
    argume:aa bb
    

    结果分析

    通过显示结果可以看到:
    $# 是传给脚本的参数个数
    $0 是脚本本身的名字
    $1是传递给该shell脚本的第一个参数
    (2是传递给该shell脚本的第二个参数 )@ 是传给脚本的所有参数的列表

    linux命令执行返回值说明

    在 Linux 下,不管你是启动一个桌面程序也好,还是在控制台下运行命令,所有的程序在结束时,都会返回一个数字值,这个值叫做返回值,或者称为错误号 ( Error Number )。

    在控制台下,有一个特殊的环境变量 $?,保存着前一个程序的返回值,我们可以试试:

    $ ls *.png
    Diagram1.png  eqn.png         peazip.png
    eqn4.png      Mandelbrot.png  x2.png
    $ echo $?
    0
    

    先随便执行个命令,比如像上面的 ls 某些文件,然后通过 echo $?,打印 $? 的值~
    我们发现返回值是 0,这是什么意思呢?
    只要返回值是 0,就代表程序执行成功了~
    也就是说,如果 $? 变量的值不是 0 的话,就表示上一个命令在执行的过程中出错了。

    我们可以试着 ls 一个不存在的文件:

    $ ls linuxgem
    ls: 无法访问 linuxgem: 没有那个文件或目录
    $ echo $?
    2
    

    这样,对于某些打印出一堆不熟悉的英文信息的命令,可以方便的看出它是否成功执行结束。
    不过,每次都 echo $? 一下太累了,没关系,你可以把 $? 放在提示符里去:

    将上次命令执行是否成功的返回值放到提示符里面去:

    export PS1="[$?]${PS1}"
    
    tom@localhost ~ $ export PS1="[$?]${PS1}"
    [0]tom@localhost ~ $
    
    export PS1="[$?]${PS1}"  
    

    这个命令把 $? 的值放在的提示符的最前面,这样每次执行完命令,这个值都会自动更新,这下就一目了然了~

    用perror查看错误提示

    那么如果返回的值不是 0,我们要怎么知道是那里出错了呢? 大多数的程序出错都会给出提示,如果没有提示的话,可以用 perror 这个程序来查看错误的信息,比如返回值是 2,我们可以运行:

    $ perror 2
    OS error code   2:  No such file or directory
    

    这样就清楚了,原来是文件不存在~

  • 相关阅读:
    Lua 虚拟机指令
    如何打包和部署air应用程序
    demjson
    mongo批量插入问题(insert_many,bulk_write),spark df转json传入mongo
    python isinstance()方法的使用
    python 时间对应计算
    第三方库-正则re
    第三方库-时间函数dateutil
    Mongodb操作-更新操作符
    python文件操作-1.将PDF转成Excel
  • 原文地址:https://www.cnblogs.com/michaelcjl/p/15001835.html
Copyright © 2011-2022 走看看