q66262 发表于 2018-8-28 12:51:00

笔记-Shell特殊变量

  位置变量:
  $0: 获取当前执行shell的文件名称,如果执行脚本带路径那么就包括脚本路径
  $n:获取当前执行的shell脚本的第ng参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9,大括号括起来${10}.
  # vim q.sh
  echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}
  输出的结果
  # sh q.sh {a..z}
  a b c d e f g h i j k l m n o
  $*:将所有的命令行所有参数视为单个字符串,等同于 “$1$2$3”,"$*"
  $@: 将命令行每个参数视为单独的字符串,等同于“$!”"$2" "$2"这是将参数传递给其他程序的最佳方式,因为他会保留所有内嵌在每个参数里的任何空白
  注意:上述区别仅限在于加双引号的时候,即“$*”与“$@”
  例:# set -- "I am" from HuNan
  # echo $#
  3
  例:
  # for i in "$*";do echo $i;done有双引号的情况下,当做一个参数输出
  I am from HuNan
  # for i in "$@";do echo $i;done有双引号的情况下,独立输出
  I am
  from
  HuNan
  例 :
  # for i;do echo $i;done去掉in变量列表,相当于in “$@”
  I am
  from
  HuNan
  例:
  # for i in $*;do echo $i;done   不加双引号,把所有参数输出,然后第一个参数“I am”也拆开了
  I
  am
  from
  HuNan
  $?: 获取执行上一个指令的返回值(0 为成功,非零为失败) 这个变量很常用
  例:
  echo $?
  $#:获取当前执行的shell脚本后面的参数总个数。
  企业案例控制用户传参个数:
  # vim q1.sh
  [ $# -ne 2 ] && {
  echo "pls input two number"
  exit 1                   ---->赋值给当前的shell的$?变量了。
  }
  echo "Thanks!"

页: [1]
查看完整版本: 笔记-Shell特殊变量