《Shell 编程》03_Shell 变量知识进阶

版权声明: https://blog.csdn.net/weixin_42061048/article/details/83304677

《Shell 编程》03_Shell 变量知识进阶

标签(空格分隔): Shell


3.1 Shell 中特殊且重要的变量

3.1.2 特殊位置参数变量

位置变量 作用说明
$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.sh
n.sh #<== 获取脚本的名称

3.1.3 特殊状态变量

位置变量 作用说明
$? 获取执行上一个指令的执行状态返回值(0 为成功,非零为失败)
$$ 获取当前执行的 shell 脚本的进程号(PID)
$! 获取上一个在后台工作的进程的进程号(PID)
$_ 获取在此之前执行的命令或脚本的最后一个参数

3.2 bash Shell 内置变量命令

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 语句会按如下方式重新命名所有的位置参数变量,即 $2 成为 $1,$3 成为 $2 等,以此类推,在程序中每使用以此 shift 语句,都会使所有的位置参数依次向左移动一个位置,并使位置参数 $# 减 1,直到减到 0 为止。

6)exit

命令格式:exit-Exit the shell
功能:退出 Shell 程序。在 exit 之后可以有选择地指定一个数作为返回状态。

3.3 Shell 变量子串

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 =L
expr length "$变量名"
echo "$变量名"|awk '{print length($0)}'

3.4 特殊扩展变量

表达式 说明
${#parameter:-word} 如果 parameter 变量值为空或未赋值,则会返回 word 字符串并替代变量的值
${#parameter:=word} 如果 parameter 变量值为空或未赋值,则设置这个变量值为 word,并返回其值
${#parameter:?word} 如果 parameter 变量值为空或未赋值,那么 word 字符串将被作为标准错误输出,否则输出变量的值
${#parameter:+word} 如果 parameter 变量值为空或未赋值,则什么都不做,否则 word 字符串将替代变量的值
  • 每个表达式内的冒号都是可选的。如果省略了表达式中的冒号,则将每个定义中的 “为空或未赋值” 改成 “未赋值”。

猜你喜欢

转载自blog.csdn.net/weixin_42061048/article/details/83304677
今日推荐