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\n"
  • 消除环境变量: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 数字”把这个数字以函数返回值的形式传给“$?”

转义字符

转义字符 说明
\n 换行
\r 回车
\t 制表符(tab)
\b 退格
\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}

猜你喜欢

转载自www.cnblogs.com/liangjingfu/p/9418957.html