第2章 shell的语法
- 管道和重定向
1 重定向输出> 2 重定向输入< 3 管道|
- 变量
1 用户变量 2 环境变量 3 参数变量
| 参数变量 | 说明 |
| $0 | shell脚本的名字 |
| $$ | shell脚本的进程号 |
| $1, $2, ... | 各个参数 |
| $# | 参数个数 |
| $* | 列出所有参数 |
| $@ | 列出所有参数(不受IFS改变) |
- 条件测试命令test或[
字符串比较
| string1 = string2 | |
| string1 != string2 | |
| -n string | 字符串不为空,则为真 |
| -z string | 字符串为空,则为真 |
算术比较
| expr1 -eq expr2 | 如果相等,则为真 |
| expr1 -ne expr2 | 如果不相等,则为真 |
| expr1 -gt expr2 | 如果expr1大于expr2,则为真 |
| expr1 -ge expr2 | 如果expr1大于等于expr2,则为真 |
| expr1 -lt expr2 | 如果expr1小于expr2,则为真 |
| expr1 -le expr2 | 如果expr1小于等于expr2,则为真 |
| ! expr |
文件条件测试
| -d file | 如果是目录,则为真 |
| -e file | 如果文件存在,则为真(不可移植,用-f) |
| -f file | 如果是普通文件,则为真 |
| -g file | 如果设置了set-group-id位,则为真 |
| -r file | 如果可读,则为真 |
| -s file | 如果大小不为0,则为真 |
| -u file | 如果设置了set-user-id位,则为真 |
| -w file | 如果可写,则为真 |
| -x file | 如果可执行,则为真 |
- 控制结构
if语句
for语句
while语句
until语句
case语句
- 参数扩展
| ${param:-default} | 如果param为空,就设为default |
| ${#param} | param长度 |
| ${param#word} | 从param头部开始删除与word匹配到最小部分,返回剩余部分 |
| ${param##word} | 从param头部开始删除与word匹配到最大部分,返回剩余部分 |
| ${param%word} | 从param尾部开始删除与word匹配到最小部分,返回剩余部分 |
| ${param%%word} | 从param尾部开始删除与word匹配到最大部分,返回剩余部分 |
示例
1 #!/bin/sh 2 3 unset foo 4 echo ${foo:-bar} 5 6 foo=fud 7 echo ${foo:-bar} 8 9 foo=/usr/bin/X11/startx 10 echo ${foo#*/} 11 echo ${foo##*/} 12 13 bar=/usr/local/etc/local/networks 14 echo ${bar%local*} 15 echo ${bar%%local*} 16 17 exit 0
结果
1 bar 2 fud 3 usr/bin/X11/startx 4 startx 5 /usr/local/etc/ 6 /usr/
浙公网安备 33010602011771号