- 管道和重定向
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/startx10 echo ${foo#*/}11 echo ${foo##*/}12 13 bar=/usr/local/etc/local/networks14 echo ${bar%local*}15 echo ${bar%%local*}16 17 exit 0
结果
1 bar2 fud3 usr/bin/X11/startx4 startx5 /usr/local/etc/6 /usr/