zoukankan      html  css  js  c++  java
  • shell语法 02-shell变量

    Linux shell变量

    • 环境变量(全局变量)
    • 普通变量(局部变量)
      • 特殊位置参数变量
      • shell内置变量(转义字符)
      • shell变量子串

    环境变量(全局变量)

    • 环境变量的名字均采用大写形式
    • 环境变量保存在用户家目录下的.bash_profile
    • 查看系统所有变量:env、declare、set
    • 设置环境变量方法
    export NAME=fuge
    NAME=fuge ; export NAME
    declare -x NAME=fuge
    
    • 永久生效文件:/etc/bashrc、/etc/profile、/etc/profile.d/
    echo NAME=liangjingfu >>/etc/bashrc
    
    source /etc/profile
    
    • 显示环境变量:echo、printf
    echo $HOME
    printf "$HOME
    "
    
    • 消除环境变量:unset
    unset HOME
    

    常见环境变量

    变量名 含义
    SHELL=/bin/bash 登录Shell类型
    TERM=vt100 终端设置
    HOSTNAME=centos6 当前主机名
    HISTSIZE=1000 记录在命令行历史文件中的命令行数
    USER=root 当前用户的用户名
    PATH=/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/root/bin 全局PATH路径,命令搜索路径。
    一个由冒号分隔的目录列表,Shell用它来搜索命令。
    PWD=/etc 当前路径
    LANG=en_US.UTF-8 字符集
    SHLVL=1 每启动一个bash实例就将其加1
    HOME=/root 当前用户家目录
    TMOUT=3600 退出前等待超时的秒数
    UID=0 当前用户的UID

    普通变量(局部变量)

    • 定义方式有四种:单引号、双引号、无引号、反引号
      • 单引号:所见即所得,输出时会将单引号内的所有内容都原样输出
      • 双引号:输出双引号内的所有内容。会先把变量、命令、转义字符解析出结果,然后再输出最终内容
      • 无引号:不建议赋值有空格的内容。会先把变量、命令解析出结果,然后再输出最终内容
      • 反引号:用于引用命令,相当于$()
    • 变量名一般是由字母、数字、下划线组成
    • 变量输出可用$c和${c}

    shell脚本普通变量使用建议

    • 在脚本中定义普通字符串变量时,应尽量把变量的内容用双引号括起来
    • 单纯数字的变量内容可以不加引号
    • 希望变量的内容原样输出时需要加单引号
    • 希望变量值引用命令并获取命令的结果时就用反引号或$()

    特殊位置参数变量

    特殊变量

    位置变量 作用说明
    $0 获取当前执行的shell脚本的文件名如果执行脚本包含了路径,那么就包含脚本的路径
    $n 获取当前执行的shell脚本的第n个参数当n为0时表示脚本的文件名当n大于9,则用大括号括起来,例如${10}
    $# 获取当前执行的shell脚本后面接的参数的总个数
    $* 获取当前shell脚本所有传参的参数"$*",则表示将所有的参数视为单个字符串,相当于"$1 $2 $3"
    $@ 获取当前shell脚本所有传参的参数"$@",则表示将所有的参数视为不同的独立字符串,相当于"$1" " $2" "$3"
    $? 获取执行上一个指令的执行状态返回值0为成功,非0位失败
    $$ 获取当前执行的Shell脚本的进程号(PID)
    $! 获取上一个在后台工作的进程和进程号(PID)
    $_ 获取在此之前执行的命令或脚本的最后一个参数

    '$?' 返回值的用法如下:

    • 判断命令、脚本或函数等程序是否执行成功
    • 若在脚本中调用执行“exit 数字”,则会返回这个数字给“$?”变量
    • 如果是在函数里,则通过“return 数字”把这个数字以函数返回值的形式传给“$?”

    转义字符

    转义字符 说明
    换行
    回车
    制表符(tab)
     退格
    v 纵向制表符

    shell变量子串

    表达式 说明 实例
    ${parameter} 返回变量$parameter的内容 echo ${HOSTNAME}
    ${#parameter} 返回变量$parameter的内容的长度(按字符),也适用于特殊变量 echo ${#HOSTNAME}
    ${parameter:offset} 在变量${parameter}中,从位置offset之后开始提取子串到结尾 echo ${HOSTNAME:2}
    ${parameter:offset:length} 在变量${parameter}中,从位置offset之后开始提取长度为length的子串 echo ${HOSTNAME:2:2}
    ${parameter#word} 从变量${parameter}开头开始删除最短匹配的word子串
    ${parameter##word} 从变量${parameter}开头开始删除最长匹配的word子串
    ${parameter%word} 从变量${parameter}结尾开始删除最短匹配的word子串
    ${parameter%%word} 从变量${parameter}结尾开始删除最长匹配的word子串
    ${parameter/pattern/string} 使用string代替第一个匹配的pattern test=testabcABC;echo ${test/ng/NG}
    ${parameter//pattern/string} 使用string代替所有匹配的pattern test=testabcABC;echo ${test//ng/NG}
    ${parameter^pattern} 把变量中的第一个字符换成大写 test=testabcABC;echo ${test^}
    ${parameter^^pattern} 把变量中的所有小写字母,全部替换为大写。 test=testabcABC;echo ${test^^}
    ${parameter,pattern} 把变量中的第一个字符换成小写 test=testabcABC;echo ${test,}
    ${parameter,,pattern} 把变量中的所有大写字母,全部替换为小写。 test=testabcABC;echo ${test,,}
    ${parameter:-word} 如果parameter的变量值为空或未赋值,则会返回word字符串代替变量的值用途:如果变量未定义,则返回备用的值,防止变量为空值或因未定义而导致异常 echo ${test:-testabcABC};echo $test
    ${parameter:=word} 如果parameter的变量值为空或未赋值,则设置这个变量未word,并返回其值。位置变量和特殊变量不适用。用途:如果变量未定义,则自动赋值,防止变量为空值或因未定义而导致异常 echo ${test:=testabcABC};echo $test
    ${parameter:?word} 如果parameter的变量值为空或未赋值,则word字符串将被作为标准错误输出,否则输出变量的值用途:用于捕捉由于变量未定义而导致的错误,并退出程序 echo ${test:?testabcABC}
    ${parameter:+word} 如果parameter的变量值为空或未赋值,则什么都不做,否则word字符串将代替变量的值 echo ${test:+testabcABC}
  • 相关阅读:
    rails enum用于存储数据
    single-table inheritance 单表继承
    imageable.touch
    jbuilder的set!方法重构接口
    Two Strings Are Anagrams
    java项目导入IntelliJ IDEA
    mac 下载安装 IntelliJ IDEA Tomcat
    Merge k Sorted Lists Leetcode Java
    ruby on rails validates uniqueness
    使用update!导致的更新时候的错误信息不显示 ruby on rails
  • 原文地址:https://www.cnblogs.com/liangjingfu/p/9418957.html
Copyright © 2011-2022 走看看