BASH
在写脚本时,需要用到很多变量,bash的内置变量,自定义变量,特殊变量,变量值若为字符串,直接在脚本处理等等。
写脚本的能力突出在四方面:
- 字符串处理的能力
- 运用工具处理文本数据的能力:sed awk….
- 特殊变量使用的能力
- 逻辑能力
内置变量:全大写
变量名 | 解释 |
---|
PATH | 系统环境变量 |
HOSTNAME | 系统主机名 |
UID | 当前用户ID |
HISTFILE | history存储文件位置 |
HISTFILESIZE | history文件大小 |
HISTCONTROL | history控制类型 |
$BASH | bash二进制程序文件的路径 |
$BASH_SUBSHELL | 子shell的层次 |
$BASH_VERSION | bash版本 |
$EDITOR | 默认编辑器 |
$EUID | 有效的用户ID |
$UID | 当前用户的ID号 |
$FUNCNAME | 当前函数的名称 |
$GROUPS | 当前用户显示的组 |
$HOME | 当前用户的家目录 |
$HOSTTYPE | 主机架构类型,用来识别系统硬件 |
$MACHTYPE | 平台类型,系统平台依赖的编译平台 |
$OSTYPE | OS系统类型 |
$IFS | 输入数据时的字段分隔符,默认是空白符(空格、制表符、换行符) |
$OLDPWD | 上次使用的目录 |
$PWD | 当前目录 |
$PPID | 父进程 |
$PS1 | 主提示符 |
$PS2 | 第二提示符,主要用于补充完全命令输入时的提示符 |
$PS3 | 第三提示符,用于select命令中 |
$PS4 | 第四提示符,当使用-X选项调用脚本时,显示的提示符,默认为+号 |
$SECONDS | 当前脚本已经运行的时长 |
$SHLVL | shell的级别。bash别嵌入的深度 |
2、特殊变量:
变量名 | 解释 |
---|
$0 | 脚本名称自身 |
$1,$2… | 位置参数 |
$# | 命令行参数个数 |
$* | 所有的参数,被当作一个字符串 |
$@ | 所有的参数,每个参数都是一个独立的字符串 |
$- | 传递给脚本的标记 |
$! | 运行于后台的最后一个作业的PID |
$_ | 上一条命令的最后一个参数的值 |
$? | 上一条命令状态的返回值 |
$$ | 脚本自身的PID |
操作变量:
变量名 | 解释 |
---|
${#var} | 返回变量中字符串的长度 |
${var} | 变量引用 |
${var:-default} | 如果var没有声明或者为空,则返回default字串,否则返回var自身的值 |
${var:+default} | 如果var没有声明或者为空,则返回空字串,否则返回default的值 |
${var:=default} | 如果var没有声明或者为空,则返回default字串,并且将default赋值给var,否则返回var自身的值 |
${var:?default} | 如果var没有声明或者为空,则以default为错误信息返回,否则var自身的值 |
变量为字符串的
变量名 | 解释 |
---|
| |
删除子串 | |
${var#*word} | 查找var中自左而右第一个被word匹配到的串,并将此串及向左的所有内容都删除 |
${var#*word} | 查找var中自左而右最后一次被word匹配到的串,并将此串及向左的所有内容都删除 |
${var%word*} | 查找var中自右而左第一个被word匹配到的串,并将此串及向右的所有内容都删除 |
${var%%word*} | 查找var中自右而左最后一次被word匹配到的串,并将此串及向右的所有内容都删除 |
| |
取子串 | |
${var:pos} | 偏移pos个字符,取余下的字串 |
${var:pos:num} | 偏移pos个字符,取num个字符长度的字串 |
| |
字串替换 | |
${var/Pattern/Replaceplacement} | 以Pattern为模式匹配var中的字串,将第一次匹配到的替换为Replaceplacement |
${var// Pattern/Replaceplacement} | 以Pattern为模式匹配var中的字串,将全部匹配到的替换为Replaceplacement6 |
声明变量:
declare | |
---|
-i | 整形 |
-a | 数值 |
-x | 环境变量 |
-r | 只读变量,不能撤销,不能修改,相当于readonly |
-f | 声明函数 |