bash变量
2019-05-26 10:28 Gizing 阅读(206) 评论(0) 收藏 举报变量规则
- 变量赋值时不加$:
var=123,使用时加$:$var或${var} - 输出变量:
echo $var或echo ${var} - 变量类型默认是字符串
- 变量与变量内容以一个等号连接,且等号两边不能有空格,如
i=1 - 变量名只能由英文和数字组成,且开头不能是数字
- 变量内容有空格可使用双引号或单引号括起来
- 单引号内特殊字符是纯文本,照常输出
- 双引号内特殊字符保留原有特性,如
var="lang is $LANG",输出echo $var得lang is en_US
- 可用
\转义特殊字符(enter,$等) - 可用反单引号`或
$(命令)给一串命令作输入,如version=$(uname -r)输出echo $version得2.6.18 - 追加变量内容,在变量后面写上
:和追加内容,如PATH=$PATH:/home/bin - 某个变量需要给子进程使用,用
export使变量变成环境变量,如export var。因为子进程仅会继承父进程的环境变量 - 取消某个变量
unset var,进入子进程bash - 非环境变量当连接断开时会自动清除
特殊变量
| $0 | 当前脚本的文件名 |
| $num | num为从1开始的数字,$1是第一个参数,$2是第二个参数,${10}是第十个参数 |
| $# | 传入脚本的参数的个数 |
| $* | 所有的位置参数(作为单个字符串,如"$1 $2 ...") |
| $@ | 所有的位置参数(每个都作为独立的字符串,如"$1"、"$2" ...)。 |
| $? | 当前shell进程中上一个命令的返回值,如果上一个命令成功执行则$?的值为0,否则为其他非零值,常用做if语句条件 |
| $$ | 当前shell进程的pid |
| $! | 后台运行的最后一个进程的pid |
| $- | 显示shell使用的当前选项 |
| $_ | 之前命令的最后一个参数 |
变量匹配
${var%pattern} 和 ${var%%pattern} # 从右边开始匹配,删除匹配部分返回剩下的
${var#pattern} 和 ${var##pattern} # 从左边开始匹配,删除匹配部分返回剩下的
${var%pattern} 和 ${var#pattern} # 表示最短匹配,匹配到就停止,非贪婪
${var%%pattern} 和 ${var##pattern} # 表示最长匹配
${variable/pattern/str} # 将变量中第一个匹配 pattern 的替换成 str,并返回
${variable//pattern/str} # 将变量中所有匹配 pattern 的地方替换成 str 并返回
pattern支持的通配符
* 表示零个或多个任意字符
? 表示零个或一个任意字符
[...] 表示匹配中括号里面的字符
[!...] 表示不匹配中括号里面的字符
# 例子
echo ${SSH_CLIENT} # 结果 172.16.20.4 13104 22
echo ${SSH_CLIENT%% *} # 结果 172.16.20.4
只有在pattern中使用了通配符才有最长最短的匹配,否则没有最长最短匹配之分
从键盘读取内容到变量read命令
read [-pt] var
# -p 后面接提示符
# -t 后面接等待的秒数
declare/typeset命令,声明变量类型
declare [-aixr] var
# -a 将var定义为数组
# -i 将var定义为整型
# -x 将var变成环境变量
# +x -x的反动作
# -r 设为readonly,该变量不可被更改和重设
浙公网安备 33010602011771号