Shell中变量学习
Posted Dream_yz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell中变量学习相关的知识,希望对你有一定的参考价值。
Shell变量学习
变量就是用一个固定的字符串或字符与数组组合代替更多更复杂的内容,该内容可能还会包含变量、路径、字符串等其他内容。
环境变量
全局变量,可以在创建他们的shell及其派生的任意子shell中使用,包括自定义坏境变量和bash内置环境变量。(备注:所有环境变量的名字均采用大写形式)
设置环境变量
- export 变量名=value
- 变量名=value; export 变量名
- declare –x 变量名=value
用户环境变量
~/.bashrc
~/.bash_profile
全局环境变量配置
/etc/profile
/etc/bashrc
/etc/profile.d/
变量定义总结
- 环境变量名通常大写
- 通常使用export定义环境变量
- 用env和set显示默认环境变量,用unset消除本地变量和环境变量
- 希望环境变量永久生效,可以将其放在用户环境变量文件或全局环境变量文件里
普通变量
局部变量,只能在创建它们的shell函数或shell脚本中使用。
设置普通变量
- 变量名=value (备注:适合定义简单的数字,字符串及路径名)
- 变量名=’value’ (备注:适合定义显示纯字符串,不解析变量及命令)
- 变量名=”valude”(备注:适合定义字符串中带有变量集命令,需要解析出来在输出变量的定义,该种定义最常使用)
变量定义总结:
- 数字内容的变量定义可以不加引号,没有特殊要求的字符串等定义最好都加双引号,如果真的需要原样输出就加单引号。
- 命令解析结果定义与赋值,需使用反引号或者$()将赋值的命令括起来
- 使用echo $变量名即可输出变量
- echo输出变量时,也可用单引号、双引号、反引号,这与前面变量定义基本相符
- $name_sub,当变量后面链接有其他字符串时,必须给变量名加上大括号,及写成$name_sub
- awk加单引号后再同时加双引号能够保证正确输出。
特殊变量
- $0 获取当前执行shell脚本的文件名
- $n 获取当前执行shell脚本的第n个参数值,注意n>10使用$10方式
- $# 获取当前执行shell脚本的参数总个数
- $@ 获取当前执行shell脚本所有传参的参数,不加引号和$*相同,如果给$@加上双引号如”$@”则表示将所有的参数视为不同的独立字符串,即”$1””$2””$3”…”,这是将多参数传递给其他程序的最佳方式,因为保留了所有的内嵌每个参数里面的任何空白。$*和$@都加双引号时有区别,不加双引号时没区别
- $? 获取执行上一个指令的返回值(0成功,非零失败)
- $$ 获取当前执行的shell脚本的进程号
- $! 获取上一行在后台工作的进程的进程号
- $_ 获取在此之前执行的命令活脚本的最后一个参数
变量子串
- $name 返回变量$name的内容 $#name 返回变量$name内容的长度(按字符),也适用于特殊变量
- $name:offset 在变量$name中,从位置offset之后开始提取子串到结尾
- $name:offset:length 在变量$name中,从位置offset之后开始提取长度为length的子串
- $name#word 在变量$name开头开始删除最短匹配的word子串 $name##word
- 在变量$name开头开始删除最长匹配的word子串 $name%word
- 在变量$name结尾开始删除最短匹配的word子串 $name%%word
- 在变量$name结尾开始删除最长匹配的word子串 $name/pattern/string
- 使用string代替第一个匹配的pattern $name//pattern/string
- 使用string代替所有匹配的pattern $name:-word
- 如果变量未定义,则返回备用值,防止变量为空值或因未定义而导致异常 $name:=word
- 基本上同$name:-word,但该变量会额外给name变量赋值 $name:?word
- 用于捕捉由于变量未定义而导致的错误,并退出程序 $name:+word
- 如果name变量值为空或未赋值,则什么都不做,否则word字符串讲替代变量值
- 对变量求绝对值可以使用一下命令:
$name#-
以上是关于Shell中变量学习的主要内容,如果未能解决你的问题,请参考以下文章