1>程序必须以下面的行开始,符号#!用来告诉系统它后面的参数是用来执行该文件的程序。
#!/bin/sh或者其它
2>变量赋值
第一:在等号 "=" 的两边没有空格
第二个:在定义一个字时可以省略引号,但是当定义的环境变量值多于一个字时(包含 空格或制表键),引号是必须的。
3>当环境变量没有与周围文本明显分开时,可以用花括号将它括起
myvar='test'
echo $myvartest(错误)
echo ${myvar}test(正确)
4>当导出环境变量时,它可以自动地由以后运行的任何脚本或可执行程序环境使用
export myvar
5>单引号与双引号区别
单引号变量无法扩展
myvar=test
echo '$myvar' //结果:$myvar
echo "$myvar" //结果:test
6>`反引号
反引号的功能是命令替换,将反引号中的字符串做为命令来执行
A=`date`
echo $A 显示的不是date而是当时的时间串
7>##,#,%%,%的用法参考
http://www.ibm.com/developerworks/cn/linux/shell/bash/bash-1/index.html
8>"$0" 这个程序的执行名字,$n 这个程序的第n个参数值,n=1..9 ,$* 这个程序的所有参数,$# 这个程序的参数个数,$? 执行上一个指令的返回值
9>判断文件的属性
-e 文件存在返回1, 否则返回0
-r 文件可读返回1,否则返回0
-w 文件可写返回1,否则返回0
-x 文件可执行返回1,否则返回0
-o 文件属于用户本人返回1, 否则返回0
-z 文件长度为0返回1, 否则返回0.
-f 文件为普通文件返回1, 否则返回0
-d 文件为目录文件时返回1, 否则返回0
10>测试字符串
字符串1 = 字符串2 当两个字串相等时为真
字符串1 != 字符串2 当两个字串不等时为真
-n 字符串 当字符串的长度大于0时为真
-z 字符串 当字符串的长度为0时为真
字符串 当串字符串为非空时为真
11>测试两个整数关系
数字1 -eq 数字2 两数相等为真
数字1 -ne 数字2 两数不等为真
数字1 -gt 数字2 数字1大于数字2为真
数字1 -ge 数字2 数字1大于等于数字2为真
数字1 -lt 数字2 数字1小于数字2为真
数字1 -le 数字2 数字1小于等于数字2为真
12>逻辑测试
-a 与
-o 或
! 非
13>特殊字符
$ 美元符
\ 反斜杠
` 反引号
" 双引号
< ,>,*,?,[,]
14>通配符
* 任意字符串
? 一个任意字符
[abc] a, b, c三者中之一
[a-n] 从a到n的任一字符
15>字符串比较
请用双引号括起字符串和字符串变量,因为如果环境变量中恰巧有一个空格或制表键,bash 将无法分辨,从而无法正常执行程序
if [ "$myvar" = "foo bar oni" ]
then
echo "yes"
fi
16>shell算术
请使用算术表达式用 "$((" 和 "))" 括起
echo $((1+3))
17>确保方括号空格
通常用" [ ] "来表示条件测试。要确保方括号的空格。
18>local定义变量,把变量放在局部名称空间
myvar="hello"
myfunc() {
local x
local myvar="one two three"
for x in $myvar
do
echo $x
done
}
myfunc
echo $myvar $x