您的位置:首页 > 运维架构 > Shell

【BASH】脚本接触之shell变量

2009-05-07 14:56 603 查看
bash脚本编程跟其他的编程一样,都是有保存string/number的变量,这些变量可以用来赋值,比较,作为参数传递等。但是bash脚本中的变量有一些特殊的操作符可以方便你使用它们,同时bash提供一系列提供丰富信息的内嵌变量。接下去几天会看到的都是跟bash变量的使用相关。

通常情况,bash变量使用全大写名称,这不是强制的。变量不必像c语言中提前声明,哪里需要就可以在那里使用,尽管有时bash某些操作会将变量当作数字对待,实际上变量都是各种各样的字符串。请看下面的示例:
#
trivial script using shell variables

#
(but at least it is commented!)

MYVAR="something"
echo
$MYVAR

#
similar but with no quotes

MY_2ND=anotherone
echo
$MY_2ND

#
quotes are needed here:

MYOTHER="more
stuff to echo"

echo
$MYOTHER


关于bash变量,有两点非常重要。第一,bash变量赋值,name=value这种大家可能见的多了,注意,等号两边都不能有空白符。
说哈这个原因:前面说了shell运行程序的基本语法---你在命令行输入程序名,然后程序运行。所有命令后面的内容都将作为参数传递给程序,如下:
$
ls filename

上例中,'ls'是程序名,'filename'作为第一个也是唯一一个传递给'ls‘的参数。
这个例子跟刚刚说的有关吗?考虑下bash如果允许赋值时在等号两边存在空白符,如下:
MYVAR
= something

bash在区分是需要调用的命令还是赋值语句时会很困难,尤其当有的程序使用'='作为它的一个或者多个参数(e.g.
test)。所以还是尽量保持代码的简洁吧,否则bash将视他们为独立分开的字,同时命名文件的时候最好不要使用'=',尤其是脚本文件。

第二点:
引用shell变量时不使用'$',这是语法错误。所以,给变量赋值的时候不使用'$',在引用的时候要使用。用编译原理的行话说,这两种语法的不同是变量的L-value和R-value。

再一次强调,这样做的目的是消除语义的二义性,如下:
MYVAR=something
echo
MYVAR is now MYVAR

上面这个例子说的是,bash不能区分字符串”MYVAR”还是变量$MYVAR的值,如果使用双引号能解决吗?不能,并且会更糟,所有的非变量名字都需要使用双引号,包括命令,你希望像下面一样使用命令吗?
$
"ls" "-l" "/usr/bin/xmms"

如果你尝试的话,上面这个是行的通的。所以,还是在引用变量的时候使用R-value语法吧。
MYVAR=something
echo
MYVAR is now $MYVAR


谨记,shell中一切都是字符串,'$'用来引用变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: