LOCKLOSE 发表于 2018-8-25 12:43:51

shell-特殊变量


[*]  位置变量。
  $0 获取当前执行的shell脚本的文件名。如图:
  # vim 0.sh
  # cat 0.sh
  echo $0
  # sh 0.sh
  0.sh
  #
[*]  如果我把它的完全路径输入的话就会这样,如图:
[*]
  # sh /root/0.sh
  /root/0.sh
  $1一直到$10是代表对应的第几个变量,如$1是对应的第一个变量的值,如果是$10的话,要把10用{}括号括号起来,如${10}
  如图:
  # sh 0.sh zhouyu
  zhouyu
  顺便说一下,seq是发送从哪个值到哪个值,如命令
  seq -s " " 1 10
  是说发送1到10用空格分隔出来,如图:
  # seq -s " $" 1 10
  1 $2 $3 $4 $5 $6 $7 $8 $9 $10
  $#是指命令行参数的总个数。如果给你命令行的参数有10个那么$#就是10
  dirname $0是把脚本的目录取出来
  basename $0是把名称取出来。
  如图:
  # cat 0.sh
  dirname $0
  basename $0
  # sh /root/0.sh
  /root
  0.sh
  #
  可以去看看/etc/init.d/nfs文件对于这些参数的用法。
  $@和$*的区别
  $*是把所有的变量看成是一个变量,在加了""的情况下就是这样。如果不加""的话就会把每一      个变量都拆分出来,这样和$@是没有区别的
  $@是把所有的变量都拆分出来,在加了""的情况下就是这样的。两者的区别可以看看下面的例      子
  # set "zhou yu" 1 3
  # for i;do echo $i;done
  zhou yu
  1
  3
  # for i in $*;do echo $i;done
  zhou
  yu
  1
  3
  # for i in $@;do echo $i;done
  zhou
  yu
  1
  3
  # for i in "$*";do echo $i;done
  zhou yu 1 3
  # for i in "$@";do echo $i;done
  zhou yu
  1
  3
  有时候我们要删除目录的时候,就是用变量删除的,可是如果没有变量或者我们定义的变量突然失效的话,那有可能会从/开始删除,这样的话就会对系统造成影响。所以我们可以用以下命令来确保我们的变量存在
  ${zhouyu:=/tmp}
  上面那个的意思就是说如果$zhouyu变量不存在,就会赋予它一个值,这个值为/tmp

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