变量的定义
shell中的变量的定义规则
shell中的变量在使用之前无需定义,可以在使用的同时创建
shell中的变量没有明确的分类,一般情况行啊,一个变量保存一个串
Shell中的变量若要进行计算,需使用工 具程序进行转换。
Shell变量的变量名由字母、数字和下划线组成,开头只能是字母或下划线。
若shell变量中出现其他字符,则表示变量名到此为止
给变量赋值时,等号两端不能有空格, 其格式为"变量名=值”,若要给变量赋空值 ,缺省格式中”值”的部分,跟上换行符即可。
若变量中含有空格,必须使用引号将变量括起
除了普通变量外,Shell脚本中还会用到一些特别的变量,包括:环境变量、位置变量、标准变量、和特殊变量
环境变量(永久变量):
此类变量不仅可以所有于单个脚本,还可以用于创建该变量的Shell以及该Shell的派生子Shell或者进程。
环境变量使用“export”关键字设定或创建,若要将一个本地变量更改为环境变量,可以使用以下方法:
export 变量名
若要创建一个环境变量,则使用以下格式:export 变量名 = 值
位置变量:
位置变量即执行脚本时传入脚本中,对应位置的变量,类似函数的参数,应用方法为“$”加上参数的位置 如:$0、 $1、$2,其中$0比较特殊,表示脚本的命令,其余的一次表示传入脚本的第一个、第二个参数等。
执行sec.sh 及运行结果。
#!/bin/sh
echo "number of vars:"$#
echo "number of shell script:"$0
echo "first var:"$1
echo "second var:"$2
echo "third var:"$3
exit 0
Shift命令:使用shift可以移动位置变量对应的参数,shirt每执行一次,参数顺序左移一个位置,移出去的参数不可再用。若在sec.sh中添加如下内容:
#!/bin/sh
echo "number of vars:"$#
echo "number of shell script:"$0
echo "first var:"$1
echo "second var:"$2
echo "third var:"$3
shift
echo "first var:"$1
echo "second var:"$2
echo "third var:":$3
exit 0
运行结果
标准变量
标准变量也是环境变量,在bash环境建立时生成,该变量自动解析,通过查看etc目录下的profile文件可以查看系统中的标准环境变量;使用evn可以查看系统中的环境变量,包括环境变量和标准变量
特殊变量
Shell中定义了一下特殊的变量,这些变量及含义分别如下。(这部分参考:http://c.biancheng.net/cpp/view/2739.html)
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同。 |
$? | 上个命令的执行情况,0表示执行成功,其他表示执行失败。 |
$$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 |
$* 和 $@ 的区别
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。
但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
下面的例子可以清楚的看到 $* 和 $@ 的区别:
#!/bin/bash
echo "\$*=" $*
echo "\"\$*\"=" "$*"
echo "\$@=" $@
echo "\"\$@\"=" "$@"
echo "print each param from \$*"
for var in $*
do
echo "$var"
done
echo "print each param from \$@"
for var in $@
do
echo "$var"
done
echo "print each param from \"\$*\""
for var in "$*"
do
echo "$var"
done
echo "print each param from \"\$@\""
for var in "$@"
do
echo "$var"
done
执行 ./test.sh "a" "b" "c" "d",看到下面的结果:
$*= a b c d
"$*"= a b c d
$@= a b c d
"$@"= a b c d
print each param from $*
a
b
c
d
print each param from $@
a
b
c
d
print each param from "$*"
a b c d
print each param from "$@"
a
b
c
d
退出状态
$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。不过,也有一些命令返回其他值,表示不同类型的错误。
下面例子中,命令成功执行:
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
$echo $?
0
$
变量的运算
Shel中变量没有明确的类型,变量值都以字符串的形式存储,但Shell中也可能进行一-些算术运算,因此需要使用命令将变量中的字符串转换为数值。Shell中的运算一般通过两个命令实现: let 和 expr。
let命令可以进行算术和数值表达式的测试,let命令的使用格式如下:
let 表达式
echo "i= "$i
#!/bin/sh
i=1
echo "i= "$i
let i=i+2
echo "i=i+4"
echo "i="$i
exit 0
let命令也可以使用如下形式代替:((算术表达式))
#!/bin/sh
i=1
((i+=3)
echo "i= "$i
exit 0
expr可以对整型变量进行算术计算,实使用expr命令时可以使两个数值直接进行计算,例如进行加法运算"3+5",则可以在命令行直接输入以下语句:
expr 3 + 5
运算结果会直接在命令行输出。若是通过变量的引用进行计算,添加 "$" 即可。
说明:
若表达式中是遍历,使用“$"引用即可。
运算符与变量或数据之间需要有一个空格。
若要在脚本中使用expr命令,需要使用符号' ` '(该按键一般位于Tab键之上)将其内嵌到等式当中。
#!/bin/sh
a=10
b=20
value=`expr $a + $b`
echo "vlaue is:"$value
exit 0
运行结果:
[rwenjie@localhost shCode]$ vim testexpr.sh
[rwenjie@localhost shCode]$ ./testexpr.sh
vlaue is:30
[rwenjie@localhost shCode]$