zoukankan      html  css  js  c++  java
  • Shell脚本编程基础之shell脚本变量

    变量

    变量表示内存空间中存放的数据

    变量的类型

    • 内置变量
    • 自定义变量

    变量的数据类型

    • 字符:
    • 数值:整型,浮点型(bash不支持)

    Shell中变量命名法则

    • 变量名大写
    • 局部变量小写
    • 函数名小写
    • 只能使用数字字母和下划线,且不能以数字开头
    • 不能使用程序中的保留字和内部变量
    • 简洁明了,见名知意,体现实际用途
    • 使用简写要明确简写没有歧义
    • 统一命名规则(驼峰命名法:大驼峰JustDoIt 小驼峰justDoit)

    变量的定义和引用

    变量的生效范围

    • 普通变量: 当前进程
    • 环境变量: 当前shell进程及子进程
    • 本地变量: 某段代码片段,通常指函数

    变量的赋值

    使用=进行变量赋值

    • 直接字串:name='root'
    • 引用变量:name="$LANG" ## 引用变量赋值临时生效
    • 引用命令:name=COMMAND或者name=$(COMMAND)
      随着脚本的结束,脚本中定义的变量就没了
    [06:49:42 root@C8-3-55 ~]#COLOR="33[1;33m";END="33[0m"
    [06:55:50 root@C8-3-55 ~]#echo -e "${COLOR}Hello WorldEND! $END"
    Hello WorldEND!
    

    查看系统变量

    [07:35:53 root@C8-3-55 ~]#set | less
    BASH=/bin/bash
    BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactiv
    e_comments:login_shell:progcomp:promptvars:sourcepath
    BASHRCSOURCED=Y
    BASH_ALIASES=()
    BASH_ARGC=()
    BASH_ARGV=()
    BASH_CMDS=()
    BASH_COMPLETION_VERSINFO=([0]="2" [1]="7")
    BASH_LINENO=()
    BASH_REMATCH=()
    BASH_SOURCE=()
    BASH_VERSINFO=([0]="4" [1]="4" [2]="19" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
    BASH_VERSION='4.4.19(1)-release'
    ……
    
    

    环境变量

    子进程

    运行一个程序会生成一个进程,如果这个程序再生成程序,则被称作这个程序的子进程

    • 使用pstree显示当前系统中的进程树
    [08:03:06 root@C8-3-55 ~]#pstree -p | head -n 10
    systemd(1)-+-NetworkManager(966)-+-{NetworkManager}(973)
               |                     `-{NetworkManager}(975)
               |-VGAuthService(894)
               |-agetty(1015)
               |-atd(1003)
               |-auditd(865)-+-sedispatch(867)
               |             |-{auditd}(866)
               |             `-{auditd}(868)
               |-chronyd(906)
               |-crond(1010)
    

    默认变量只在当前变量中生效

    
    [08:03:35 root@C8-3-55 ~]#pstree -p | grep bash
               |-sshd(977)-+-sshd(2039)---sshd(2057)-+-bash(2060)-+-grep(43599)
               |           |                         `-bash(2063)---sleep(43597)
    [08:05:25 root@C8-3-55 ~]#echo $BASHPID
    2060
    
    • 使用命令printenv显示当前环境变量
    [08:06:19 root@C8-3-55 ~]#printenv
    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:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=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:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=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:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=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:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:
    SSH_CONNECTION=10.0.0.1 6372 10.0.0.55 22
    LANG=en_US.utf8
    HISTCONTROL=ignoredups
    DISPLAY=localhost:10.0
    HISTTIMEFORMAT=%F %T root
    HOSTNAME=C8-3-55
    XDG_SESSION_ID=1
    USER=root
    SELINUX_ROLE_REQUESTED=
    PWD=/root
    HOME=/root
    SSH_CLIENT=10.0.0.1 6372 22
    SELINUX_LEVEL_REQUESTED=
    SSH_TTY=/dev/pts/0
    MAIL=/var/spool/mail/root
    TERM=xterm
    SHELL=/bin/bash
    SELINUX_USE_CURRENT_RANGE=
    SHLVL=1
    LOGNAME=root
    DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
    XDG_RUNTIME_DIR=/run/user/0
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    HISTSIZE=1000
    LESSOPEN=||/usr/bin/lesspipe.sh %s
    _=/usr/bin/printenv
    

    set命令包含了printenv中的环境变量

    只读变量

    只能声明定义,不能修改,即:常量

    固定值,常用默认值均可以钉子为不变的常量

    常量定义后不能随便修改和删除

    [08:16:03 root@C8-3-55 ~]#readonly BeiJing=010
    [08:16:29 root@C8-3-55 ~]#echo BeiJing
    BeiJing
    [08:16:39 root@C8-3-55 ~]#echo $BeiJing
    010
    [08:16:44 root@C8-3-55 ~]#unset BeiJing 020
    -bash: unset: BeiJing: cannot unset: readonly variable
    -bash: unset: `020': not a valid identifier
    [08:16:58 root@C8-3-55 ~]#BeiJing=020
    -bash: BeiJing: readonly variable
    

    退出当前进程后,临时定义的常量会被清除

    [08:17:58 root@C8-3-55 ~]#echo $ BeiJing
    $ BeiJing
    
    • 使用readonly查看系统中已定义的常量
    [08:18:11 root@C8-3-55 ~]#readonly
    declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath"
    declare -ir BASHPID
    declare -ar BASH_REMATCH=()
    declare -ar BASH_VERSINFO=([0]="4" [1]="4" [2]="19" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
    declare -ir EUID="0"
    declare -ir PPID="48077"
    declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
    declare -ir UID="0"
    
    * * * 胖并快乐着的死肥宅 * * *
  • 相关阅读:
    springboot maven打包插件
    maven打包指定main入口插件
    团队开发环境一致性性要求
    springboot 在idea中实现热部署
    IDEA 2018.1可用License服务(持续更新)
    IDEA打jar包
    3月18号
    3月17号
    3月16号
    3月13号
  • 原文地址:https://www.cnblogs.com/bpzblog/p/14514291.html
Copyright © 2011-2022 走看看