@yanglt7
2018-10-23T03:45:43.000000Z
字数 2254
阅读 671
Shell
| 位置变量 | 作用说明 |
|---|---|
| $0 | 获取当前执行的 shell 脚本的文件名,如果执行脚本包含了路径,那么就包括脚本的路径 |
| $n | 获取当前执行的 shell 脚本的第 n 个参数值,n=1..9,n=0 时表示脚本的文件名;n>9,则用大括号括起来,接的参数以空格隔开 |
| $# | 获取当前执行的 shell 脚本后面接的参数总个数 |
| $* | 获取当前执行的 shell 脚本所有传参的参数,不加括号和 $@ 相同;如果加上双引号,则表示将所有参数视为单个字符串 |
| $@ | 获取当前执行的 shell 脚本所有传参的参数,不加括号和 $* 相同;如果加上双引号,则表示将所有参数视为不同的独立字符串 |
[ylt@web001 scripts]$ dirname /home/ylt/scripts/n.sh/home/ylt/scripts #<== 获取脚本的路径[ylt@web001 scripts]$ basename /home/ylt/scripts/n.shn.sh #<== 获取脚本的名称
| 位置变量 | 作用说明 |
|---|---|
| $? | 获取执行上一个指令的执行状态返回值(0 为成功,非零为失败) |
| $$ | 获取当前执行的 shell 脚本的进程号(PID) |
| $! | 获取上一个在后台工作的进程的进程号(PID) |
| $_ | 获取在此之前执行的命令或脚本的最后一个参数 |
1)echo
命令格式:echo args #<== 可以是字符串和变量的组合
功能:将 echo 命令后面 args 指定的字符串及变量等显示到标准输出
| echo 参数选项 | 说明 |
|---|---|
| -n | 不换行输出内容 |
| -e | 解析转义字符 |
| 转义字符: | |
| \n | 换行 |
| \r | 回车 |
| \t | 制表符(tab) |
| \b | 退格 |
| \v | 纵向制表符 |
2)eval
命令格式:eval args
功能:当 Shell 程序执行到 eval 语句时,Shell 读入参数 args,并将它们组合成一个新的命令,然后执行。
3)exec
命令格式:exec 命令参数
功能:exec 命令能在不创建新的子进程的前提下,转去执行指定的命令,当指定的命令执行完毕后,该进程就终止了。
当使用 exec 打开文件后,read 命令每次都会将文件指针移动到文件的下一行进行读取,直到文件末尾,利用这个可以实现处理文件内容。
4)read
命令格式:read 变量名表
功能:从标准输入读取字符串等信息,传给 Shell 程序内部定义的变量。
5)shift
命令格式:shift-Shift positional parameters
功能:shift 语句会按如下方式重新命名所有的位置参数变量,即 1,2 等,以此类推,在程序中每使用以此 shift 语句,都会使所有的位置参数依次向左移动一个位置,并使位置参数 $# 减 1,直到减到 0 为止。
6)exit
命令格式:exit-Exit the shell
功能:退出 Shell 程序。在 exit 之后可以有选择地指定一个数作为返回状态。
| ID | 表达式 | 说明 |
|---|---|---|
| 1 | ${parameter} | 返回变量 $parameter 的内容 |
| 2 | ${#parameter} | 返回变量 $parameter 内容的长度(按字符),也适用于特殊变量 |
| 3 | ${#parameter:offset} | 在变量 ${parameter} 中,从位置 offset 之后开始提取子串到结尾 |
| 4 | ${#parameter:offset:length} | 在变量 ${parameter} 中,从位置 offset 之后开始提取长度为 length 的子串 |
| 5 | ${#parameter#word} | 从变量 ${parameter} 开头开始删除最短匹配的 word 子串 |
| 6 | ${#parameter##word} | 从变量 ${parameter} 开头开始删除最长匹配的 word 子串 |
| 7 | ${#parameter%word} | 从变量 ${parameter} 结尾开始删除最短匹配的 word 子串 |
| 8 | ${#parameter%%word} | 从变量 ${parameter} 结尾开始删除最长匹配的 word 子串 |
| 9 | ${#parameter/pattern/string} | 使用 string 代替第一个匹配的 pattern |
| 10 | ${#parameter//pattern/string} | 使用 string 代替所有匹配的 pattern |
Shell 打印变量值的长度的方法:
echo ${#变量名}echo $变量名|wc =Lexpr length "$变量名"echo "$变量名"|awk '{print length($0)}'
| 表达式 | 说明 |
|---|---|
| ${#parameter:-word} | 如果 parameter 变量值为空或未赋值,则会返回 word 字符串并替代变量的值 |
| ${#parameter:=word} | 如果 parameter 变量值为空或未赋值,则设置这个变量值为 word,并返回其值 |
| ${#parameter:?word} | 如果 parameter 变量值为空或未赋值,那么 word 字符串将被作为标准错误输出,否则输出变量的值 |
| ${#parameter:+word} | 如果 parameter 变量值为空或未赋值,则什么都不做,否则 word 字符串将替代变量的值 |
- 每个表达式内的冒号都是可选的。如果省略了表达式中的冒号,则将每个定义中的 “为空或未赋值” 改成 “未赋值”。