bash中有如下四种变量:用户自定义变量、位置变量、环境变量和预定义变量。
1.用户自定义变量
用户自定义的变量是bash 脚本里用户自己声明的变量,区分大小写,使用时必须明确变量的类型,要避免运算过程中变量类型的错用。 变量的声明格式及赋值如下:
变量=值(注意:等号两边不能有空格)
例如:
a=“Red Hat Enterprise Linux”
bc=5
对用户自定义变量进行调用需要在变量前加$,且有时需要用{}括起来,同其他字符分开,例如:
echo $a
echo RHEL5 is ${a}${bc}
变量名多于一个字符时,建议用{}把变量括起来使用。变量赋值后,可以在程序的其他地方对其进行重新赋值,且没有类型限定的要求。
变量的使用过程通常配合引号的应用,引号分为双引号、单引号和倒引号,各种引号在Shell本中使用的义是不同的。
双引号:如果把一个带有$字符的变量放在双引号中,程序执行到该行时会把变量替换为它的值。另外,如果在参数中包含一个或过个空白字符,必须给参数加双引号。
单引号:如果把一个带有$字符的变量放在单引号中,不会发生替换现象。这相当于用\字符取消$的特殊含义。
倒引号:用于命令替换。在倒引号内部的shell命令首先被执行,其结果输出替代用倒引号括起来的文本。
例如:
1 #!/bin/bash
2 a="Red Hat Enterprise Linux"
3 echo $a
4 echo "$a"
5 echo '$a'
6 echo \$a
7 a=`pwd`
8 echo '$a' now equals $a
运行结果如下:
Red Hat Enterprise Linux
Red Hat Enterprise Linux
$a
$a
$a now equals /root
2.位置变量
bash在解释用户命令时,会把所输入的命令后面的参数使用位置变量传递给bash脚本程序,$1$2…$n分别代表参数1、参数2…参数n,而$0代表脚本名字。
$*:这个变量包括参数的列表。
$@:这个变量包括参数的列表。
$#:这个变量包括参数的个数。
例如:
#!/bin/bash
echo "There are $# parameters. "
echo "The parameters are * ${*} *"
echo "The parameters are * $@ *"
echo "The script $0 is now running. "
echo "The first parameter was * $1 *"
echo "The second parameter was * $2 *"
echo "The third parameter was * $3 *"
上述程序保存为text.sh 把它设置为可执行,运行后得到如下结果:
[root@localhost ~]# ./text.sh one two
There are 2 parameters.
The parameters are * one two *
The parameters are * one two *
The script ./text.sh is now running.
The first parameter was * one *
The second parameter was * two *
The third parameter was * *
因为脚本只有两个参数,所以$3的值为空
3.环境变量
shell运行时系统自动设置的一些变量。这些变量命名通常用大写字母或数组组成。
算术运算
expr命令和let命令
expr命令把一个算术表达式作为参数,通常形式如下:
expr arg
其中arg通常为 [操作数][运算符] [操作数] 格式的表达式。运算符和操作数之间要有空格隔开。有效的算术操作符主要有:+、-、*、/、%
*作为乘法运算符时要用\符号修饰
$expr 4 \* 5
结果显示:20
条件判断
与C语言相反,条件判断的结果为0表示真,为1表示假。
条件判断的格式有两种:
(1) text condition
(2) [ condition ] 左右中括号和判断条件之间要用空格隔开
字符串比较
整数关系比较
文件属性比较
多个条件的逻辑组合
控制结构
if分支语句
if condition1;
then
命令
[elif condition2;
then
命令]
[else
命令]
fi
其中,中括号部分可省略。elif是else-if的缩写。每个if语句要以fi作为结束.
Case分支语句
case 条件 in
模式1)
命令
;;
模式2)
命令
;;
esac
for语句
for变量 in item1 item2 … itemN
do
命令
done
while和until语句
while/until
do
命令
done
函数使用
格式:
[function]函数名()
{
命令
}
其中,中括号部分可以省略,函数名后的小括号不带有形式参数。如果在函数内部需要使用传递给函数的参数,一般用$0、
1
、
…
、
1、…、
1、…、n以及
∗
、
*、
∗、#、$@。函数的定义要写在引用函数的语句前。