shell简介入门之bash编程之变量
发表于:2007-07-04来源:作者:点击数:
标签:
Bourne Shell的变量格式只有字符串变量,所以要使用数值运算则必须靠外部命令达到目的目 的。它的变量种类有下列几种。 A::用户变量:这是最常用的变量,我们可以用任何不包含空白字符的字符串来当作变量域名。设 定变量值时则用下列方式: var=string 调用
Bourne Shell的变量格式只有字符串变量,所以要使用数值运算则必须靠外部命令达到目的目
的。它的变量种类有下列几种。
A::用户变量:这是最常用的变量,我们可以用任何不包含空白字符的字符串来当作变量域名。设
定变量值时则用下列方式:
var=string
调用变量时则在变量域名前加上一"$"号。
例如下面的test1.sh程序:
#!/bin/bash
name=tom
echo name
echo $name
运行结果如下:
name
tom
B::系统变量(环境变量):和用户变量相似,只不过此种变量会将其值传给其所执行的命令。
要半一用户变量设定为系统变量,只要加上:
export var
以下是用户一进入系统之后就已设定好的系统变量:
$HOME 用户自己的目录
$PATH 执行命令时所搜寻的目录
$TZ 时区
$MAILCHECK 每隔多少秒检查是否有新的信件
$PS1 在命令行时的提示号
$PS2 当命令尚未打完时,Shell要求输入提示号
$MANPATH man指令的搜寻路径
C::只读的用户变量:和用户变量相似,只不过这些变量不能被改变。要将用户变量设成只读的。
例如:
readonly var
而若只打readonly则会列出所有只读的变量。应注意,系统变量不可以设定成只读的。例如:
#!/bin/bash
name=tom
readonly name
echo $name
name=john
readonly
运行结果如下:
tom
./test2.sh:name:readonly variable
declare -ar BASH_VERSINFO=`([0]="2" [1]="03" [2]="0" [3]="2" [4]="RELEASE"
[5]="i691-pc-
linux-gnu")`
declare -ir EUID="501"
declare -ar GROUPS=`()`
declare -ir PPID="1190"
declare -r SHELLOPTS="braceexpand:hashall:interactive-comments"
declare -ir UID="501"
declare -r name="tom"
D::特殊变量:有些变量 是一开始执行脚本时就会设定,并且不加以修改,但我们不叫它只读的
系统变量,而叫它特殊变量(有些书会叫它只读的系统变量),因为这些变量是一执行程序时就
有了,况且用户无法将一般的系统变量设定成只读的。以下是一些特殊变量:
$0 这个程序的执行名字
$n 这个程序的第n个参数值,n=1...9
$* 这个程序的所有参数
$# 这个程序的参数个数
$$ 这个程序的PID
$! 执行上一个背景指令的PID
$? 上一个指令的返回值
当执行这个程序时的参数数目超过9个时,我们可以使用shift命令将参数往前移一格,如此即可
使用第10个以后的参数。除此之外,可以用set命令$n和$*,方法如下:
set string
这时$*的值即为string,而分解后则会放入$n。如果set命令后面没有参数,则会列出所有已以设
定的变量以及其值:
文件名: ex1 参数:this is a test
例如:
#!/bin/bash
echo Filename:$0
echo Arguments:$*
echo No. of args.:$#
echo 2nd arg.:$2
shift
echo No.of args.:$#
echo 2nd arg.:$2
set hello,everyone
echo Arguments:$*
echo 2nd arg.:$2
运行结果如下:
Filename: x1
arguments: his is a test
No. of args.: 4
2nd arg.: is
No. of args.:3
2nd arg.: a
Arguments: hello,everyone
2nd arg.:everyone
值得一提的是,当你想从键盘输入一变量值时,你可以使用下面的命令:
read var1 var2......
这时read 会将一个字分给一个变量。如果输入的字比变量还多,最后一个变量会将剩下的字当成
其值。如果输入 的字比变量还少,则后面的变量会设成空字符串。如果需要处理数值运算,我
们可以使用expr命令。
原文转自:http://www.ltesting.net