- 标准文件描述符
0:标准输入 1:标准输出 2:标准错误输出
- 重定向
把命令输出保存到文件:ls -l > lsoutput.txt
把输出内容附加到一个文件:ps >> lsoutput.txt
把标准输出和标准错误输出分别重定向到不同的文件:kill -HUP 1234 >killout.txt 2>killerr.txt
把标准输出和标准错误输出重定向到相同的文件:kill -l 1234 >killouterr.txt 2>&1 (注意操作顺序。含义是:将标准输出定向到文件killouterr.txt,然后将标准错误重定向到标准输出相同的地方)
重定向输入:more < killout.txt
- 参数扩展与模式匹配
参数形式 扩展后
x{y,z} xy xz
${x}{y,z} ${x}y ${x}z
${x}{y,$z} ${x}y ${x}${z}
${param#pattern} 从param前面最小删除pattern的匹配
${param##pattern} 从param前面最大删除pattern的匹配
${param%pattren} 从param后面最小删除pattern的匹配
${param%%pattern} 从param后面最大删除pattern的匹配
${param/pattern/string} 从param中用string替换pattern的第一次匹配,string可为空
${param//pattern/string} 从param中用string替换pattern的所有匹配,string可为空
${param:3:2} 截取$param中索引3开始的2个字符
${param:3} 截取$param中索引3至末尾的字符
${@:3:2} 截取参数列表$@中第3个开始的2个参数
${param:-word} 若$param为空或没有被设置,则参数返回word,$param不变
${param:+word} 若$param不为空,则参数返回word,$param不变
${param:=word} 若$param为空或没有被设置,则参数返回word,同时$param被设置为word
${param:?massage} 若$param为空或没有被设置,则输出错误信息message
- 条件
test或[命令:为了增强可读性,当使用[命令时,通常会使用符号]来结尾。
注意:必须在[符号和被检查的条件之间留出空格。
字符串比较 结果
string1 = string2 如果两个字符串相同则结果为真string1 != string2 如果两个字符串不同则结果为真
-n string 如果字符串不为空则结果为真
-z string 如果字符串为空则结果为真
算术比较 结果
a -eq b 如果a、b相等则结果为真
a -ne b 如果a、b不相等则结果为真
a -gt b 如果a大于b则结果为真
a -ge b 如果a大于等于b则结果为真
a -lt b 如果a小于b则结果为真
a -le b 如果a小于等于b则结果为真
! expression 如果表达式为假则结果为真
文件调价测试 结果
-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 如果文件可执行则结果为真
- for语句
for foo in bar fud 43
do
echo $foo
done
for file in $(ls f*.sh);do
lpr $file
done
- case语句
case variable in
pattern [ | pattern ] ) statements;;
pattern [ | pattern ] ) statements;;
....
esac
- AND列表
statement1 && statement2 && statement3 && ...
从左开始顺序执行每条命令,如果前一条命令返回的是TRUE,它的右边的下一条命令才能够执行。如此持续直到有一条命令返回FALSE,或者列表中所有命令都执行完毕。&&的作用是检查前一条命令的返回值。只有列表中的所有命令都执行成功,才算执行成功,否则就算它失败。
- OR列表
statement1 || statement2 || statement3 || ...
从左开始顺序执行每条命令,如果前一条命令返回的是FALSE,它的右边的下一条命令才能够执行。如此持续直到有一条命令返回TRUE,或者列表中所有命令都执行完毕。&&的作用是检查前一条命令的返回值。只有列表中的有一条命令执行成功,才算执行成功。
- expr命令
expr命令将它的参数当作一个表达式来求值,通常用$(( ))来替代。
x=`expr $x + 1` 反引号` `使x的取值为命令expr $x + 1的执行结果。
x=$(expr $x + 1)