zoukankan      html  css  js  c++  java
  • SHELL脚本编程变量详解

             SHELL脚本编程变量详解

                           作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.变量概述

    1>.什么是变量

      变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。

      变量是命名的内存空间,变量可以通过变量名访问。
        在指令式语言中,变量通常是可变的,但在纯函数式语言(如Haskell)中,变量可能是不可变(immutable)的
        在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中);
        但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义"变量"的准确外延。

      变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。

      简单的说,变量就是用一个固定的字符串(也可能是字符数字等的组合),替代更多更复杂的内容,这个内容里可能还会包含变量的路径,字符串等其他的内容。使用变量最大的好处就是方便,当然,除了方便以外,很多时候在编程中使用变量也是必须的,否则就发无法完成开发工作。

    2>.变量类型

    作用:
      (1)数据存储方式
      (2)参与的运算
      (3)表示的数据范围
    类型:
      字符
      数值:整型、浮点型

    3>.shell中变量命名法则

      a>.变量名称可以由字母,数字和下划线组成,但是不能以数字开头;
      b>.在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型;
      c>.变量用等号连接值,等号左右两侧不能有空格;
      d>.变量的值如果有空格,需要使用单引号或双引号包括;
      e>.在变量的值中,可以使用“"转义符;
      f>.如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“$变量名”或用"${变量名}"包含;
      g>.如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令;
      h>.环境变量名建议大写,便于区分;
      i>.不能使程序中的保留字:例如if, for
      j>.见名知义,统一命名规则:驼峰命名法

    4>.Shell中命名强烈建议规则

    (1)变量名大写
    (2)局部变量小写
    (3)函数名小写
    (4)用英文名字,并体现出实际作用

    二.编程语言分类

    静态编译语言(Static):
      使用变量前,先声明变量类型,之后类型不能改变,在编译时检查。
      典型代表:C,C++,Java
    
    动态编译语言(Dynamic):
      不用事先声明类型,随时可以赋值为其他类型。由于编程时不知道是什么类型,很难推断运行时的类型
      典型代表:bash,Python
    
    强类型语言(Strong):
      不同类型数据操作,必须经过强制转换才同一类型才能运算。
      典型代表:java , c# ,python
      如:以下python代码
        print('yinzhengjie'+ 18) 提示出错,不会自动转换类型
        print('yinzhengjie'+str(18)) 结果为magedu10,需要显示转换类型
    
    弱类型语言(Weak):
      同类型间可以操作,自动隐式转换。即语言的运行时会隐式做数据类型转换,无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用   
      典型代表:bash(不支持浮点数),php,javascript
      如:以下JavaScript代码
          console.log(
    1+'a')

    常见的编程语言分类大致如下图所示(图片来自网络)。

     

    三.bash中变量的种类

    1>.根据变量的生效范围等标准划分下面变量类型

    局部变量:
      生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效
    环境变量:
      生效范围为当前shell进程及其子进程
    本地变量:
      生效范围为当前shell进程中某代码片断,通常指函数
    位置变量:
      $
    1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
    特殊变量:
      $
    ?, $0, $*, $@, $#,$$

    2>.局部变量

    [root@node101.yinzhengjie.org.cn ~]# echo $name                   #当前变量没有被定义,因此打印的是空行。
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# name="yinzhengjie"         #定义一个局部变量,变量赋值可以是直接字串
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $name
    yinzhengjie
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# name="$USER"              #变量弱引用,其中的变量引用会被替换为变量值
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $name
    root
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# name=`hostname`          #变量的命令引用
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $name
    node101.yinzhengjie.org.cn
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# unset name                 #删除变量
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $name
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# name='$USER'               #变量的强引用,其中的变量引用不会被替换为变量值,而保持原字符串
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $name
    $USER
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# set                            #显示已定义的所有变量
    BASH=/bin/bash
    BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:p
    romptvars:sourcepathBASH_ALIASES=()
    BASH_ARGC=()
    BASH_ARGV=()
    BASH_CMDS=()
    BASH_LINENO=()
    BASH_SOURCE=()
    BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")
    BASH_VERSION='4.2.46(2)-release'
    COLUMNS=135
    DIRSTACK=()
    EUID=0
    GROUPS=()
    HISTCONTROL=ignoredups
    HISTFILE=/root/.bash_history
    HISTFILESIZE=1000
    HISTSIZE=1000
    HOME=/root
    HOSTNAME=node101.yinzhengjie.org.cn
    HOSTTYPE=x86_64
    IFS=$' 	
    '
    JAVA_HOME=/home/softwares/jdk1.8.0_201
    LANG=en_US.UTF-8
    LESSOPEN='||/usr/bin/lesspipe.sh %s'
    LINES=27
    LOGNAME=root
    LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43
    :ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:'MACHTYPE=x86_64-redhat-linux-gnu
    MAIL=/var/spool/mail/root
    MAILCHECK=60
    OLDPWD=/data/script
    OPTERR=1
    OPTIND=1
    OSTYPE=linux-gnu
    PATH=/data/script:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/softwares/jdk1.8.0_201/bin:/root/bin:/h
    ome/softwares/mysql/bin/PIPESTATUS=([0]="0")
    PPID=3755
    PROMPT_COMMAND='printf "33]0;%s@%s:%s07" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
    PS1='[[e[34;1m]u@[e[0m][e[32;1m]H[e[0m] [e[31;1m]w[e[0m]]$ '
    PS2='> '
    PS4='+ '
    PWD=/root
    QTDIR=/usr/lib64/qt-3.3
    QTINC=/usr/lib64/qt-3.3/include
    QTLIB=/usr/lib64/qt-3.3/lib
    QT_GRAPHICSSYSTEM_CHECKED=1
    SHELL=/bin/bash
    SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
    SHLVL=1
    SSH_CLIENT='172.30.1.254 50528 22'
    SSH_CONNECTION='172.30.1.254 50528 172.30.1.101 22'
    SSH_TTY=/dev/pts/0
    TERM=xterm
    UID=0
    USER=root
    XDG_RUNTIME_DIR=/run/user/0
    XDG_SESSION_ID=1
    _='$USER'
    colors=/root/.dircolors
    name='$USER'
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# set     #显示已定义的所有变量

    3>.环境变量

    [root@node101.yinzhengjie.org.cn ~]# echo ${age}      #这是一种变量引用的方式
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# export age=18      #环境变量的声明方式一
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $age       #这是另外一种变量引用的方式
    18
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# declare -x age=20    #环境变量的声明方式二
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${age}
    20
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# unset age         #环境变量的删除
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${age}
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# env              #显示所有环境变量
    XDG_SESSION_ID=1
    HOSTNAME=node101.yinzhengjie.org.cn
    TERM=xterm
    SHELL=/bin/bash
    HISTSIZE=1000
    SSH_CLIENT=172.30.1.254 50528 22
    QTDIR=/usr/lib64/qt-3.3
    OLDPWD=/data/script
    QTINC=/usr/lib64/qt-3.3/include
    SSH_TTY=/dev/pts/0
    QT_GRAPHICSSYSTEM_CHECKED=1
    USER=root
    LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:
    ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:MAIL=/var/spool/mail/root
    PATH=/data/script:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/softwares/jdk1.8.0_201/bin:/root/bin:/h
    ome/softwares/mysql/bin/PWD=/root
    LANG=en_US.UTF-8
    HISTCONTROL=ignoredups
    SHLVL=1
    HOME=/root
    LOGNAME=root
    QTLIB=/usr/lib64/qt-3.3/lib
    SSH_CONNECTION=172.30.1.254 50528 172.30.1.101 22
    LESSOPEN=||/usr/bin/lesspipe.sh %s
    XDG_RUNTIME_DIR=/run/user/0
    _=/usr/bin/env
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# env | wc -l
    26
    [root@node101.yinzhengjie.org.cn ~]# 
        
    [root@node101.yinzhengjie.org.cn ~]# env           #显示所有环境变量
    [root@node101.yinzhengjie.org.cn ~]# printenv         #显示所有环境变量
    XDG_SESSION_ID=1
    HOSTNAME=node101.yinzhengjie.org.cn
    TERM=xterm
    SHELL=/bin/bash
    HISTSIZE=1000
    SSH_CLIENT=172.30.1.254 50528 22
    QTDIR=/usr/lib64/qt-3.3
    OLDPWD=/data/script
    QTINC=/usr/lib64/qt-3.3/include
    SSH_TTY=/dev/pts/0
    QT_GRAPHICSSYSTEM_CHECKED=1
    USER=root
    LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:
    ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:MAIL=/var/spool/mail/root
    PATH=/data/script:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/softwares/jdk1.8.0_201/bin:/root/bin:/h
    ome/softwares/mysql/bin/PWD=/root
    LANG=en_US.UTF-8
    HISTCONTROL=ignoredups
    SHLVL=1
    HOME=/root
    LOGNAME=root
    QTLIB=/usr/lib64/qt-3.3/lib
    SSH_CONNECTION=172.30.1.254 50528 172.30.1.101 22
    LESSOPEN=||/usr/bin/lesspipe.sh %s
    XDG_RUNTIME_DIR=/run/user/0
    _=/usr/bin/printenv
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# printenv | wc -l
    26
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# printenv         #显示所有环境变量
    [root@node101.yinzhengjie.org.cn ~]# export                #显示所有环境变量
    declare -x HISTCONTROL="ignoredups"
    declare -x HISTSIZE="1000"
    declare -x HOME="/root"
    declare -x HOSTNAME="node101.yinzhengjie.org.cn"
    declare -x LANG="en_US.UTF-8"
    declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
    declare -x LOGNAME="root"
    declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;
    41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:"declare -x MAIL="/var/spool/mail/root"
    declare -x OLDPWD="/data/script"
    declare -x PATH="/data/script:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/softwares/jdk1.8.0_201/bin:
    /root/bin:/home/softwares/mysql/bin/"declare -x PWD="/root"
    declare -x QTDIR="/usr/lib64/qt-3.3"
    declare -x QTINC="/usr/lib64/qt-3.3/include"
    declare -x QTLIB="/usr/lib64/qt-3.3/lib"
    declare -x QT_GRAPHICSSYSTEM_CHECKED="1"
    declare -x SHELL="/bin/bash"
    declare -x SHLVL="1"
    declare -x SSH_CLIENT="172.30.1.254 50528 22"
    declare -x SSH_CONNECTION="172.30.1.254 50528 172.30.1.101 22"
    declare -x SSH_TTY="/dev/pts/0"
    declare -x TERM="xterm"
    declare -x USER="root"
    declare -x XDG_RUNTIME_DIR="/run/user/0"
    declare -x XDG_SESSION_ID="1"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# export | wc -l
    25
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# export         #显示所有环境变量
    [root@node101.yinzhengjie.org.cn ~]# declare -x        #显示所有环境变量
    declare -x HISTCONTROL="ignoredups"
    declare -x HISTSIZE="1000"
    declare -x HOME="/root"
    declare -x HOSTNAME="node101.yinzhengjie.org.cn"
    declare -x LANG="en_US.UTF-8"
    declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
    declare -x LOGNAME="root"
    declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;
    41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:"declare -x MAIL="/var/spool/mail/root"
    declare -x OLDPWD="/data/script"
    declare -x PATH="/data/script:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/softwares/jdk1.8.0_201/bin:
    /root/bin:/home/softwares/mysql/bin/"declare -x PWD="/root"
    declare -x QTDIR="/usr/lib64/qt-3.3"
    declare -x QTINC="/usr/lib64/qt-3.3/include"
    declare -x QTLIB="/usr/lib64/qt-3.3/lib"
    declare -x QT_GRAPHICSSYSTEM_CHECKED="1"
    declare -x SHELL="/bin/bash"
    declare -x SHLVL="1"
    declare -x SSH_CLIENT="172.30.1.254 50528 22"
    declare -x SSH_CONNECTION="172.30.1.254 50528 172.30.1.101 22"
    declare -x SSH_TTY="/dev/pts/0"
    declare -x TERM="xterm"
    declare -x USER="root"
    declare -x XDG_RUNTIME_DIR="/run/user/0"
    declare -x XDG_SESSION_ID="1"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# declare -x | wc -l
    25
    [root@node101.yinzhengjie.org.cn ~]# 
     
    [root@node101.yinzhengjie.org.cn ~]# declare -x       #显示所有环境变量
    bash内建的环境变量如下:
        PATH
        SHELL
        USER
        UID
        HOME
        PWD
        SHLVL
        LANG
        MAIL
        HOSTNAME
        HISTSIZE
        _ 下划线
    bash内建的环境变量

    4>.只读变量

    [root@node101.yinzhengjie.org.cn ~]# readonly installDir="C:Usersyinzhengjie"    #定义只读变量方式一
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $installDir
    C:Usersyinzhengjie
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# declare -r workDir="D:Usersyinzhengjie"    #定义只读变量方式二
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $workDir
    D:Usersyinzhengjie
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# declare -r installDir="D:Usersyinzhengjie"   #只读变量只能声明,但不能修改和删除
    -bash: declare: installDir: readonly variable
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# readonly -p                 #查看只读变量
    declare -r BASHOPTS="checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shel
    l:progcomp:promptvars:sourcepath"declare -ir BASHPID
    declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")'
    declare -ir EUID="0"
    declare -ir PPID="3755"
    declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
    declare -ir UID="0"
    declare -r installDir="C:\Users\yinzhengjie"
    declare -r workDir="D:\Users\yinzhengjie"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# readonly -p     #查看只读变量

    5>.位置变量:在脚本代码中调用通过命令行传递给脚本的参数

    $1, $2,...,$n
      $n这里的n为数字,$0代表命令本身,如$1.$2分别对应第1、第2个参数,10以上参数需要用大括号"{}"包含,如"$10"
      
    shift [n]换位置
    $
    0   命令本身
    $
    *   传递给脚本的所有参数,全部参数合为一个字符串
    $@   传递给脚本的所有参数,每个参数为独立字符串,注意:$@ $
    * 只在被双引号包起来的时候才会有差异
    $#   传递给脚本的参数的个数 set
    --   清空所有位置变量
    [root@node101.yinzhengjie.org.cn ~]# vim shell/arg.sh        #编写测试脚本验证位置变量的作用
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat shell/arg.sh
    #!/bin/bash
    #
    #********************************************************************
    #Author:        yinzhengjie
    #QQ:             1053419035
    #Date:             2019-11-21
    #FileName:        shell/arg.sh
    #URL:             http://www.cnblogs.com/yinzhengjie
    #Description:        The test script
    #Copyright notice:     original works, no reprint! Otherwise, legal liability will be investigated.
    #********************************************************************
    
    echo "1st arg is $1"
    echo "2st arg is $2"
    echo "3st arg is $3"
    echo "10st arg is ${10}"
    echo "11st arg is ${11}"
    echo "12st arg is ${12}"
    echo "All arg are $*"
    echo "All arg are $@"
    echo "The number of arg is $#"
    echo "Script name is `basename $0`"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# bash shell/arg.sh {A..Z}
    1st arg is A
    2st arg is B
    3st arg is C
    10st arg is J
    11st arg is K
    12st arg is L
    All arg are A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    All arg are A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    The number of arg is 26
    Script name is arg.sh
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# vim shell/arg.sh        #编写测试脚本验证位置变量的作用
    [root@node101.yinzhengjie.org.cn ~]# cd shell/
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# vim father.sh 
    [root@node101.yinzhengjie.org.cn ~/shell]# vim son.sh 
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# cat father.sh 
    #!/bin/bash
    #
    #********************************************************************
    #Author:        yinzhengjie
    #QQ:             1053419035
    #Date:             2019-11-21
    #FileName:        shell/father.sh
    #URL:             http://www.cnblogs.com/yinzhengjie
    #Description:        The test script
    #Copyright notice:     original works, no reprint! Otherwise, legal liability will be investigated.
    #********************************************************************
    
    echo "All arg are $*"
    
    #注意:"$@" "$*"只在被双引号包起来的时候才会有差异
    son.sh "$*"
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# cat son.sh 
    #!/bin/bash
    #
    #********************************************************************
    #Author:        yinzhengjie
    #QQ:             1053419035
    #Date:             2019-11-21
    #FileName:        shell/son.sh
    #URL:             http://www.cnblogs.com/yinzhengjie
    #Description:        The test script
    #Copyright notice:     original works, no reprint! Otherwise, legal liability will be investigated.
    #********************************************************************
    
    echo "1st arg is $1"
    echo "2st arg is $2"
    echo "3st arg is $3"
    echo "11st arg is ${11}"
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# chmod +x father.sh son.sh 
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# tail -1 ~/.bashrc 
    PATH=$PATH:/root/shell
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# father.sh {a..z}
    All arg are a b c d e f g h i j k l m n o p q r s t u v w x y z
    1st arg is a b c d e f g h i j k l m n o p q r s t u v w x y z
    2st arg is 
    3st arg is 
    11st arg is 
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# vim father.sh 
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# cat father.sh 
    #!/bin/bash
    #
    #********************************************************************
    #Author:        yinzhengjie
    #QQ:             1053419035
    #Date:             2019-11-21
    #FileName:        shell/father.sh
    #URL:             http://www.cnblogs.com/yinzhengjie
    #Description:        The test script
    #Copyright notice:     original works, no reprint! Otherwise, legal liability will be investigated.
    #********************************************************************
    
    echo "All arg are $@"
    
    #注意:"$@" "$*"只在被双引号包起来的时候才会有差异
    son.sh "$@"
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# father.sh {a..z}
    All arg are a b c d e f g h i j k l m n o p q r s t u v w x y z
    1st arg is a
    2st arg is b
    3st arg is c
    11st arg is k
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    "$@"和"$*"案例(温馨提示: "$@"和"$*"只在被双引号包起来的时候才会有差异)
    [root@node101.yinzhengjie.org.cn ~/shell]# vim vars
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# cat vars
    COLOR="33[1;31m"
    COLOREND="33[0m"
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# vim rm.sh
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# vim rm.sh
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# cat rm.sh
    #!/bin/bash
    #
    #********************************************************************
    #Author:        yinzhengjie
    #QQ:             1053419035
    #Date:             2019-11-21
    #FileName:        rm.sh
    #URL:             http://www.cnblogs.com/yinzhengjie
    #Description:        The test script
    #Copyright notice:     original works, no reprint! Otherwise, legal liability will be investigated.
    #********************************************************************
    
    #导入其它脚本中的变量,在当前脚本就不用重复定义了,直接调用被调用者的变量即可
    . /root/shell/vars
    
    DESTDIR=/tmp/`date +%F_%T`
    mkdir $DESTDIR
    mv $* $DESTDIR
    echo -e "$COLOR$* is moved to $DESTDIR$COLOEREND"
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# chmod +x rm.sh
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# touch /data/f1.txt /data/f2.txt
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# rm.sh !*      #"!*"表示上一条执行命令的参数
    rm.sh /data/f1.txt /data/f2.txt
    /data/f1.txt /data/f2.txt is moved to /tmp/2019-11-21_05:04:46
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# ll /tmp/2019-11-21_05:04:46
    total 0
    -rw-r--r-- 1 root root 0 Nov 21 05:04 f1.txt
    -rw-r--r-- 1 root root 0 Nov 21 05:04 f2.txt
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# alias rm=/root/shell/rm.sh    #将系统的rm命令换成咱们自定义的rm.sh命令。
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# rm /etc/issue /etc/motd 
    /etc/issue /etc/motd is moved to /tmp/2019-11-21_05:05:55
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# ll /tmp/2019-11-21_05:05:55
    total 4
    -rw-r--r--. 1 root root 23 Nov 23  2018 issue
    -rw-r--r--. 1 root root  0 Jun  7  2013 motd
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# mv /tmp/2019-11-21_05:05:55/* /etc/
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    自定义垃圾箱,将系统的rm命令换成咱们自定义的rm.sh命令,避免生产环境中的无删除(初级版本)

     

    四.退出状态

    1>.进程使用退出状态来报告成功或失败

      0 代表成功,1-255代表失败
      $? 变量保存最近的(上一条执行的)命令退出状态
    [root@node101.yinzhengjie.org.cn ~]# ping -c 1 -w 1 www.baidu.com &> /dev/null 
    [root@node101.yinzhengjie.org.cn ~]# echo $?
    0
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $?

    2>.bash自定义退出状态码

    exit [n]:
        自定义退出状态码
    温馨提示:
      脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字   如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
    [root@node101.yinzhengjie.org.cn ~/shell]# vim test.sh
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# cat test.sh
    #!/bin/bash
    #
    #********************************************************************
    #Author:        yinzhengjie
    #QQ:             1053419035
    #Date:             2019-11-21
    #FileName:        test.sh
    #URL:             http://www.cnblogs.com/yinzhengjie
    #Description:        The test script
    #Copyright notice:     original works, no reprint! Otherwise, legal liability will be investigated.
    #********************************************************************
    
    ls -l
    exit 200
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# bash test.sh
    total 28
    -rw-r--r-- 1 root root 715 Nov 21 04:22 arg.sh
    -rwxr-xr-x 1 root root 549 Nov 20 07:58 backup_etc.sh
    -rwxr-xr-x 1 root root 575 Nov 21 04:47 father.sh
    -rwxr-xr-x 1 root root 698 Nov 21 05:03 rm.sh
    -rwxr-xr-x 1 root root 554 Nov 21 04:45 son.sh
    -rw-r--r-- 1 root root 476 Nov 21 05:17 test.sh
    -rw-r--r-- 1 root root  38 Nov 21 04:56 vars
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    [root@node101.yinzhengjie.org.cn ~/shell]# echo $?
    200
    [root@node101.yinzhengjie.org.cn ~/shell]# 
    在脚本中定义exit退出时返回的状态码
    [root@yinzhengjie shell]# more argv3.sh
    #!/bin/bash
    #@author :yinzhengjie
    #blog:http://www.cnblogs.com/yinzhengjie
    #EMAIL:y1053419035@qq.com
     
    echo "当前的进程PID是:$$"
     
    find /root -name yinzhengjie.sh > res.txt &
     
    echo "后台执行的进程是:$!"
    [root@yinzhengjie shell]#
    案例展示二

     

    五.变量赋值

      通过x的值判断y是否存在,可以用下面的这种方式:

    例子:测试x=${y-新值},如下图所示。

    删除上述变量,在观察结果,如下图所示。

    六.高级变量用法-有类型变量

    Shell变量一般是无类型的,但是bash Shell提供了declare和typeset两个命令用于指定变量的类型,两个命令是等价的
    
    declare [选项] 变量名
      -r 声明或显示只读变量
      -i 将变量定义为整型数
      -a 将变量定义为数组
      -A 将变量定义为关联数组
      -f 显示已定义的所有函数名及其内容
      -F 仅显示已定义的所有函数名
      -x 声明或显示环境变量和函数
      -l 声明变量为小写字母 declare –l var=UPPER
      -u 声明变量为大写字母 declare –u var=lower

    七.eval命令

      eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量.该命令对变量进行两次扫描
    [root@node101.yinzhengjie.org.cn ~]# whoami 
    root
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# CMD="whoami"
    [root@node101.yinzhengjie.org.cn ~]# echo $CMD
    whoami
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# eval $CMD
    root
    [root@node101.yinzhengjie.org.cn ~]# 
    参考案例1
    [root@node101.yinzhengjie.org.cn ~]# n=10
    [root@node101.yinzhengjie.org.cn ~]# echo $n
    10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo {0..$n}
    {0..10}
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# eval echo {0..$n}
    0 1 2 3 4 5 6 7 8 9 10
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    参考案例2

    八.间接变量引用

    如果第一个变量的值是第二个变量的名字,从第一个变量引用第二个变量的值就称为间接变量引用
    
    variable1的值是variable2,而variable2又是变量名,variable2的值为value,间接变量引用是指通过variable1获得变量值value的行为
        variable1=variable2
        variable2=value
    
    bash Shell提供了两种格式实现间接变量引用
        eval tempvar=$$variable1
        tempvar=${!variable1}
    [root@node101.yinzhengjie.org.cn ~]# NAME100=NAME200
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# IP100=IP200
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# IP200="172.30.1.200"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# IP=${!IP100}
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $IP
    172.30.1.200
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# eval IP2=$$IP100
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $IP2
    172.30.1.200
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    参考案例1
    [root@node101.yinzhengjie.org.cn ~]# title=CEO
    [root@node101.yinzhengjie.org.cn ~]# CEO="yinzhengjie"
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo $title
    CEO
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# echo ${!title}
    yinzhengjie
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# eval echo $$title
    yinzhengjie
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    参考案例2

    九.创建临时文件和安装复制文件命令

    1>.创建临时文件

    mktemp命令:创建并显示临时文件,可避免冲突
    
    mktemp [OPTION]... [TEMPLATE]
        TEMPLATE: filenameXXX
            X至少要出现三个
    
    常用选项(OPTION):
      -d: 创建临时目录
      -p DIR或--tmpdir=DIR:指明临时文件所存放目录位置
    [root@node101.yinzhengjie.org.cn ~]# ll backup/
    total 0
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# mktemp backup/fileXXX      #创建一个临时文件(注意整个"X"字母要大写哟~)
    backup/fileWBI
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll backup/
    total 0
    -rw------- 1 root root 0 Nov 29 18:28 fileWBI
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# mktemp backup/fileXXXXXX     #字母"X"的个数表示file后面跟的随机字母个数
    backup/fileRzD8PZ
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll backup/
    total 0
    -rw------- 1 root root 0 Nov 29 18:28 fileRzD8PZ
    -rw------- 1 root root 0 Nov 29 18:28 fileWBI
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# mktemp -d backup/fileXXXXXX    #创建一个临时目录
    backup/filevlxViC
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll backup/
    total 0
    -rw------- 1 root root 0 Nov 29 18:28 fileRzD8PZ
    drwx------ 2 root root 6 Nov 29 18:29 filevlxViC
    -rw------- 1 root root 0 Nov 29 18:28 fileWBI
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# mktemp -d -p backup/ fileXXXXXX  #指明临时文件所存放目录位置
    backup/fileuoXi4V
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll backup/
    total 0
    -rw------- 1 root root 0 Nov 29 18:28 fileRzD8PZ
    drwx------ 2 root root 6 Nov 29 18:30 fileuoXi4V
    drwx------ 2 root root 6 Nov 29 18:29 filevlxViC
    -rw------- 1 root root 0 Nov 29 18:28 fileWBI
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    参考案例1
    [root@node101.yinzhengjie.org.cn ~]# ll backup/
    total 0
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# tmpdir=`mktemp -d backup/testdirXXX`         #创建临时目录
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll backup/
    total 0
    drwx------ 2 root root 6 Nov 29 18:34 testdirxRs
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# mktemp --tmpdir=/root/backup testXXXXXX              #指明临时文件所存放目录位置
    /root/backup/test5zib2x
    [root@node101.yinzhengjie.org.cn ~]# ll backup/
    total 0
    -rw------- 1 root root 0 Nov 29 18:36 test5zib2x
    drwx------ 2 root root 6 Nov 29 18:34 testdirxRs
    [root@node101.yinzhengjie.org.cn ~]# 
    参考案例2

    2>.安装复制文件

    install命令:(相当于mkdir,cp,chown,chmod命令的集成)
      install [OPTION]... [-T] SOURCE DEST 单文件
      install [OPTION]... SOURCE... DIRECTORY
      install [OPTION]... -t DIRECTORY SOURCE...
      install [OPTION]... -d DIRECTORY...创建空目录
    
    常用选项(OPTION):
      -m MODE,默认755
      -o OWNER
      -g GROUP
    [root@node101.yinzhengjie.org.cn ~]# ll /etc/issue
    -rw-r--r--. 1 root root 23 Nov 23  2018 /etc/issue
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll backup/
    total 0
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# install -m 600 -o yinzhengjie -g root /etc/issue /root/backup/issue_bak
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll backup/
    total 4
    -rw------- 1 yinzhengjie root 23 Nov 29 18:44 issue_bak
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# install -m 700 -d /root/backup/{nginx,mysql,python}
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll backup/
    total 4
    -rw------- 1 yinzhengjie root 23 Nov 29 18:44 issue_bak
    drwx------ 2 root        root  6 Nov 29 18:45 mysql
    drwx------ 2 root        root  6 Nov 29 18:45 nginx
    drwx------ 2 root        root  6 Nov 29 18:45 python
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    参考案例

    十.小试牛刀

    1、编写脚本 systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小
    2、编写脚本 backup.sh,可实现每日将/etc/目录备份到/backup/etcYYYY-mm-dd中
    3、编写脚本 disk.sh,显示当前硬盘分区中空间利用率最大的值
    4、编写脚本 links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序
  • 相关阅读:
    java 求两个数最大值
    java 加法运算
    javs switch 语句
    git合并分支成功,但是push失败(remote: GitLab: You are not allowed to push code to protected branches on this project.)
    python 获取日期以及时间
    1713
    linux shell脚本中的延时
    java 类的继承
    Python3 使用企业微信 API 发送消息
    java if 条件语句
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/7637684.html
Copyright © 2011-2022 走看看