【shell脚本语法大全】在Linux系统中,Shell脚本是一种非常强大的工具,用于自动化任务、系统管理以及日常操作。掌握Shell脚本的语法是提升工作效率的重要一步。以下是对Shell脚本常用语法的总结,便于快速查阅和学习。
一、Shell脚本基础语法
语法元素 | 说明 | 示例 | ||||
`!/bin/bash` | 指定解释器,通常放在脚本第一行 | `!/bin/bash` | ||||
`echo` | 输出文本或变量内容 | `echo "Hello World"` | ||||
`read` | 从标准输入读取数据 | `read name` | ||||
`` | 单行注释 | ` 这是一个注释` | ||||
`;` | 分隔多条命令 | `echo "A"; echo "B"` | ||||
`&&` | 逻辑与,前一个命令成功才执行后一个 | `command1 && command2` | ||||
` | ` | 逻辑或,前一个命令失败才执行后一个 | `command1 | command2` |
二、变量与参数
语法 | 说明 | 示例 | ||
`var=value` | 定义变量 | `name="John"` | ||
`$var` | 引用变量 | `echo $name` | ||
`${var:-default}` | 若变量为空,则使用默认值 | `echo ${name:-Guest}` | ||
`$@` | 所有位置参数(保留引号) | `for arg in "$@"; do echo $arg; done` | ||
`$` | 所有位置参数(合并为一个字符串) | `echo $` | ||
`$` | 参数个数 | `echo $` | ||
`$?` | 上一条命令的返回状态(0表示成功) | `ls /nonexistent && echo "Success" | echo "Failure"` |
三、条件判断语句
语法 | 说明 | 示例 |
`[ condition ]` | 条件测试 | `[ $a -eq $b ]` |
`[[ condition ]]` | 更强的条件测试(支持字符串比较等) | `[[ $str == "hello" ]]` |
`if ... then ... fi` | 条件判断结构 | `if [ $a -gt 5 ]; then echo "Greater"; fi` |
`elif ...` | 否则如果 | `if [ $a -gt 5 ]; then ... elif [ $a -eq 5 ]; then ...` |
`else` | 否则 | `if ...; then ... else ... fi` |
`case ... esac` | 多条件匹配 | `case $var in a) echo "A";; b) echo "B";; esac` |
四、循环结构
语法 | 说明 | 示例 |
`for var in list; do ... done` | 遍历列表 | `for i in 1 2 3; do echo $i; done` |
`for (( expr1; expr2; expr3 ))` | C语言风格循环 | `for (( i=0; i<5; i++ )); do echo $i; done` |
`while condition; do ... done` | 当条件为真时循环 | `while [ $i -lt 5 ]; do echo $i; i=$((i+1)); done` |
`until condition; do ... done` | 直到条件为真时停止 | `until [ $i -ge 5 ]; do echo $i; i=$((i+1)); done` |
五、函数定义与调用
语法 | 说明 | 示例 |
`function name { ... }` | 定义函数 | `function greet() { echo "Hello $1"; }` |
`name() { ... }` | 简写函数定义 | `greet() { echo "Hi $1"; }` |
`return` | 函数返回值(0-255) | `add() { return $(($1 + $2)); }` |
`exit` | 退出脚本并返回状态码 | `exit 0` |
六、文件重定向与管道
符号 | 说明 | 示例 | ||
`>` | 输出重定向(覆盖) | `echo "test" > file.txt` | ||
`>>` | 输出追加 | `echo "more" >> file.txt` | ||
`<` | 输入重定向 | `cat < file.txt` | ||
` | ` | 管道,将前一个命令的输出作为下一个命令的输入 | `ls | grep .sh` |
`2>` | 错误输出重定向 | `command 2> error.log` | ||
`&>` | 合并标准输出和错误输出 | `command &> output.log` |
七、特殊符号与通配符
符号 | 说明 | 示例 |
`` | 匹配任意字符(零个或多个) | `.txt` |
`?` | 匹配单个字符 | `file?.txt` |
`[abc]` | 匹配括号中的任意一个字符 | `[aeiou].txt` |
`^` | 取反(在[]中使用) | `[^0-9].txt` |
`\` | 转义字符 | `echo \` |
`''` | 单引号,禁止变量扩展 | `echo 'Hello $name'` |
`""` | 双引号,允许变量扩展 | `echo "Hello $name"` |
八、常用命令与工具
命令 | 说明 | 示例 | |
`grep` | 文本搜索 | `grep "error" log.txt` | |
`sed` | 流编辑器 | `sed 's/old/new/' file.txt` | |
`awk` | 文本处理工具 | `awk '{print $1}' file.txt` | |
`cut` | 提取文本列 | `cut -d: -f1 /etc/passwd` | |
`sort` | 排序 | `sort file.txt` | |
`uniq` | 去重 | `sort file.txt | uniq` |
`find` | 文件查找 | `find /home -name ".log"` | |
`tar` | 打包压缩 | `tar -cvf archive.tar folder/` |
通过以上表格,可以快速了解Shell脚本的基本语法和常用命令。建议在实际使用中不断练习,结合具体场景编写脚本,以提高效率和解决问题的能力。