云深处 发表于 2018-8-20 12:37:55

shell-3.shell特殊变量

  Shell 特殊变量
  1.特殊变量名和含义
  变量名 含义
  $0             脚本名字
  $1             位置参数 #1
  $2 - $9   位置参数 #2 - #9
  ${10}         位置参数 #10
  $#             位置参数的个数   sh test.sh XX YY   ,$#就是2 是表示参数的个数
  $?            上个命令执行后,返回的执行命令状态结果, 或者是函数的返回值
  "$*"         所有的位置参数(作为单个字符串) *
  "$@"         所有的位置参数(每个都作为独立的字符串)
  $$      当前shell进程ID。
  ${#*}         传递到脚本中的命令行参数的个数
  ${#@}         传递到脚本中的命令行参数的个数
  $_             之前命令的最后一个参数
  $!             运行在后台的最后一个作业的进程ID(PID)
  2.【实例】
  # more third.sh
  #!/bin/bash
  #parm
  echo "this is shellname: $0"
  echo "this is parm1 :    $1"
  echo "this is parm2 :    $2"
  echo "show parm number : $#"
  echo "show parm list :   $*"
  echo "show parm list :   $@"
  echo "show parm number : ${#*}"
  echo "show parm number : ${#@}"

  echo "show process>  运行结果:
  # sh third.sh no1var no2var
  this is shellname: third.sh
  this is parm1 :    no1var
  this is parm2 :    no2var
  show parm number : 2
  show parm list :   no1var no2var
  show parm list :   no1var no2var
  show parm number : 2
  show parm number : 2

  show process>  # echo $_
  no2var
  3.$* 和 $@ 的区别
  $@ $* 只在被双引号包起来的时候才会有差异
  这部分是在网上看到的,原创已经不知道是哪位了。(这个例子很能说明)
  精确来讲,两者只有在 "" (双引号) 中才有差异,否则,都表示"全部参数"( $0 除外)。
  举例来说好了:
  sh my.sh p1 "p2 p3" p4 的话,
  不管是 $@ 还是 $* ,都可得到 p1 p2 p3 p4 就是了。
  但是,如果置于 "" (双引号)中的话:
  "$@" 则可得到 "p1" "p2 p3" "p4" 这三个不同的词段(word);
  "$*" 则可得到 "p1 p2 p3 p4" 这一整串单一的词段。
  我们可修改一下前面的 my.sh ,使之内容如下:
  代码:
  #!/bin/bash
  my_fun() {
  echo "$#"
  }
  echo 'the number of parameter in "$@" is '$(my_fun "$@")
  echo 'the number of parameter in "$*" is '$(my_fun "$*")
  然后再执行 sh my.sh p1 "p2 p3" p4 就知道 $@ 与 $* 差在哪了 ... ^_^
  the number of parameter in "$@" is 3
  the number of parameter in "$*" is 1
  【$@$* 的实例 说明】
  # cat a.txt
  aaaaaaa
  # cat b.txt
  bbbbbbb
  # cat c.sh
  #!/bin/sh
  cat $1
  # cat *.txt
  aaaaaaa
  bbbbbbb
  # sh c.sh *.txt
  aaaaaaa
  在c.sh中写了cat $1 为什么只显示一个文件中的内容, 但如果在命令行下cat *.txt就会显示2个文件信息
  将c.sh 改成 cat $@ 就正常了
  # vim c.sh
  #!/bin/sh
  cat $@    #(改成$* 也是可以的)
  # sh c.sh *.txt
  aaaaaaa
  bbbbbbb
  4.$?
  # echo `hostname`
  10-222
  # echo $?
  0
  # grep 'cpu cores' /proc/cpuinfo
  cpu cores       : 1
  # echo $?
  0
  以下几个部分在后续内容介绍
  $? 在函数的返回值会在后续的章节说明
  以上是个人点点总结和理解,水平不高,文笔水平很烂,请各位大大见谅。
  可以一起交流学习。
  我的QQ:610851588
  可以加入我建的群(现在群人很少,希望慢慢多起来)
  Linux群:183932302
  Python ,shell 交流群:469094734

页: [1]
查看完整版本: shell-3.shell特殊变量