Shell语言核心概念与语法速查

需积分: 9 3 下载量 101 浏览量 更新于2024-09-14 收藏 778KB PDF 举报
本文档是关于Linux Shell语言的语法总结,涵盖了特殊shell变量、测试操作、文件类型测试、参数替换与扩展、字符串操作、控制结构、sed操作、Awk编程以及I/O重定向和调试等内容。 ### 特殊的Shell变量 在Shell脚本中,特殊的变量用于存储各种信息,例如: - `$0`:脚本的名字。 - `$1`到`$9`:位置参数,分别代表脚本接收的第一个到第九个参数。 - `${10}`及以后:位置参数,用于存储第十个及以上参数。 - `$#`:位置参数的总数。 - `"$*"`:所有位置参数作为一个单一字符串。 - `"$@"`:所有位置参数,每个作为独立的字符串。 - `${#*}`:命令行参数的总数(字节计数)。 - `${#@}`:命令行参数的总数(单词计数)。 - `$?`:上一个命令的退出状态或返回值。 - `$$`:脚本的进程ID(PID)。 - `$-`:传递给脚本的选项标志。 - `$_`:前一个命令的最后一个参数。 - `$!`:后台运行的最后一个作业的PID。 ### 测试操作 - `eq/ne`: 数值比较,等于/不等于。 - `lt/gt/le/ge`: 字符串比较,小于/大于/小于等于/大于等于。 - `-z/-n`: 检查字符串是否为空/非空。 - `-e/-s/-f/-d/-b/-c/-L`: 文件存在/大小不为0/普通文件/目录/块设备/字符设备/符号链接。 - `-r/-w/-x`: 检查文件的读/写/执行权限。 - `-g/u`: 检查是否设置了SGID/SUID标志。 ### 文件类型测试操作 文件类型的测试通常用在条件表达式中,如`[ ]`或`[[ ]]`结构,以判断文件的属性。 ### 参数替换和扩展 - `${var}`:引用变量`var`的值。 - `${var#pattern}`/${var##pattern}:删除前导匹配的模式。 - `${var%pattern}`/${var%%pattern}`:删除尾随匹配的模式。 - `${#var}`:获取变量`var`长度。 - `${!var}`:引用变量名`var`对应的数组元素。 - `${var:-default}`:如果`var`未设置或为空,使用`default`。 - `${var:+default}`:如果`var`已设置,使用`default`。 ### 字符串操作 字符串操作包括拼接、查找、替换等,如`echo $var1$var2`进行拼接,`echo ${var#substring}`去除前缀,`echo ${var##substring}`去除最长前缀,`echo ${var%substring}`去除后缀,`echo ${var%%substring}`去除最长后缀。 ### Sed操作 Sed是一个流编辑器,常用于文本处理,如`sed 's/pattern/replacement/g' file`进行全局替换,`sed '/pattern/d' file`删除匹配行。 ### Awk编程 Awk是一种强大的文本分析工具,如`awk '{print $1}' file`打印文件的第一列,`awk '/pattern/{print}' file`打印匹配模式的行。 ### I/O和I/O重定向 I/O重定向允许将输出定向到文件而不是屏幕,如`command > output.txt`重定向输出到文件,`command 2>&1`合并错误输出和标准输出。 ### Shell调试 调试技巧包括使用`set -x`开启命令追踪,`set -v`显示脚本中的变量赋值,`set -u`检测未定义的变量。 这些知识点构成了编写和理解Shell脚本的基础,对系统管理、自动化任务和脚本编写至关重要。理解并熟练运用这些概念,能够有效地实现Linux环境下的文本处理和自动化任务。