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\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代替第一个匹配的patterntest=testabcABC;echo ${test/ng/NG}
${parameter//pattern/string}使用string代替所有匹配的patterntest=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}

转载于:https://www.cnblogs.com/liangjingfu/p/9418957.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值