2007-6-28
要创建脚本程序,首先用任意文本编辑器书写脚本程序。确定程序第一行以类似#!/bin/sh开头,表示用/bin/sh程序来执行脚本。当然也可以写#/bin/bash。然后要更改脚本程序文件的属性,使其成为可执行。这可以通过 chmod +x shelllFile来实现。
关于变量:
In Linux (Shell), there are two types of variable:
(1) System variables - Created and maintained by Linux itself. This type of variable defined in CAPITAL LETTERS.
(2) User defined variables (UDV) - Created and maintained by user. This type of variable defined in lower letters.
定义用户自己的变量:To define UDV use following syntax
Syntax: variable name=value 例如:var=11或者var=”Kevin”
变量注意事项:
Don't put spaces on either side of the equal sign when assigning value to variable.
You can define NULL variable as follows (NULL variable is variable which has no value at the time of definition) For e.g.
$ vech=
$ vech=""
To print or access UDV use following syntax
Syntax:
$variablename
例如要打印一个变量的值,可以使用 echo $var,但是要读入一个变量值,则为read var。
关于if…else..流程控制形式为:
if exp ; then
fi
或者
if exp ; then
else
fi
或者
if exp ; then
elif ; then
fi
注意:then前要加分号;exp中如果是一个表达式,例如判断一个变量是否为字符串123,则为:
if [ “$var” = “ 123” ] ; then
echo “var = 123”
fi
注意[]中的空格,即[与变量之间的空格,以及等号两侧的空格。判断一个变量还要使用引号将其包含起来。
关于for循环流程控制形式为:
for var in 1 2 3 4 3 2 1
do
echo $var
done
这样,var会从in后面的列表中依次得到一个值,即依次为1 2 3 4 3 2 1,循环的次数为这个列表的长度。
另一种控制为:
for (( var = 1; var <= 5; ++ var ))
do
echo $var
done
形式大致跟C语言相似,此处对空格的要求也不是很苛刻。但是注意for中的表达式两边一定要加两个括号。
关于while循环流程控制形式为:(until)
while [ condition ]
do
do something
done
其中条件判断和if 中的规则一样,例如:
var=”Kevin”
while [ “$var” = ”Kevin” ]
do
read var
done
关于case形式的控制:
case $var in
“Kevin”) echo “var=Kevin” ;;
“lynx”) echo “var=lynx” ;;
esac
注意每个语句块执行完后要添加两个分号。case语句块全部结束后以 esac 作为结束关键字。
使用expr来计算算术表达式:(以及let)
例如:c=1+2,就需要这样写:c=`expr 1 + 2` 注意表达式两侧的 ` 符号,是TAB键上的键盘符号。如下代码:
a=1
b=2
c=`expr $a + $b`
echo $c
即能让c=a+b。
Examples: $ expr 1 + 3
$ expr 2 - 1
$ expr 10 / 2
$ expr 20 % 3
$ expr 10 /* 3 #
乘法
$ echo `expr 6 + 3`
注意算术符号两侧一定要加空格。expr可以计算2个以上操作数的表达式。
引号的种类:有三种引号:
1. 双引号,所有符号被该引号扩起来后就变为普通字符串,除了 / 和 $ 符号。即使在双引号内使用$var也能将var变量的值输出来。
2. 单引号,
3. back quote,即TAB键上的那个符号,一般用于执行命令,例如:
echo “Today is `date` “ 即可调用date来获得系统时间。
可以多条语句放在同一行中,只需要使用分号隔开即可。
test 语句和 [] 一样可以测试表达式。
一些测试符号:
Mathematical Operator in Shell Script | Meaning | Normal Arithmetical/ Mathematical Statements | But in Shell | |
|
|
| For test statement with if command | For [ expr ] statement with if command |
-eq | is equal to | 5 == 6 | if test 5 -eq 6 | if [ 5 -eq 6 ] |
-ne | is not equal to | 5 != 6 | if test 5 -ne 6 | if [ 5 -ne 6 ] |
-lt | is less than | 5 < 6 | if test 5 -lt 6 | if [ 5 -lt 6 ] |
-le | is less than or equal to | 5 <= 6 | if test 5 -le 6 | if [ 5 -le 6 ] |
-gt | is greater than | 5 > 6 | if test 5 -gt 6 | if [ 5 -gt 6 ] |
-ge | is greater than or equal to | 5 >= 6 | if test 5 -ge 6 | if [ 5 -ge 6 ] |
要注意的是,当一个表达式为真时,返回的是0值,非0值表示假。
对于字符串,则使用其他的比较符号,如下表:
Operator | Meaning |
string1 = string2 | string1 is equal to string2 |
string1 != string2 | string1 is NOT equal to string2 |
string1 | string1 is NOT NULL or not defined |
-n string1 | string1 is NOT NULL and does exist |
-z string1 | string1 is NULL and does exist |
定义函数,使用关键字 function,例如:
function print_str()
{
echo $1
}
其中,function关键字也可省略。调用函数时只需要 函数名 参数1 参数2 。如果不传参数就直接给函数名。函数内部要读取参数,可以通过 $1, $2, $3 之类的来读取,分别表示第一个参数,第二个参数,第三个参数。其中,函数中还有一些特殊参数,例如 $0 表示函数名(对于一个shell文件来说是该文件名),$#表示参数个数。