Linux——Shell编程之变量赋值和引⽤
Linux的shell编程是⼀种⾮常成熟的编程语⾔,它⽀持各种类型的变量。有三种主要的变量类型:环境变量、内部变量和⽤户变量。
环境变量(environment variable)是系统环境的⼀部分,不必去定义它们。可以在shell程序中使⽤它们,某些变量(⽐如PATH)还能在shell中加以修改。
内部变量(built-in variable)是由系统提供的。与环境变量不同,你不能修改它们。
⽤户变量(user variable)是你在编写shell脚本时定义的。可以在shell程序内任意使⽤它们和修改它们。
shell编程和其他编程语⾔的主要不同之处是:在shell编程中,变量是⾮类型性质的。也就是说,不必指定变量是数字还是字符串。
⽤户变量
Shell编程中,使⽤⽤户变量⽆需事先声明,同时变量名的命名须遵循如下规则:
1). ⾸个字符必须为字母(a-z,A-Z);
2). 中间不能有空格,可以使⽤下划线(_);
3). 不能使⽤标点符号;
4). 不能使⽤bash⾥的关键字(可⽤help命令查看保留关键字)。
变量赋值
变量赋值的格式:
变量名=值
访问变量值
要取⽤⼀个变量的值,只需在变量名前⾯加⼀个$ 。
( ATTENTION: Don't keep blank between the variable with the equal operator '=' )
举例
#!/bin/bash
# 对变量赋值:
a="hello world"  #等号两边均不能有空格存在
# 打印变量a的值:
echo -e "A is: $a\n"
备注:
1). bash中变量赋值,等号两边均不能有空格存在;
使⽤⾃⼰喜欢的编辑器,输⼊上述内容,并保存为⽂件test_hello.bsh,然后执⾏ chmod +x test_hello.bsh使其具有执⾏权限,最后输⼊ ./test_hello或bash test_hello.bsh执⾏该脚本。
程序运⾏结果:
A is: hello world
有时候变量名可能会和其它⽂字混淆,⽐如:
num=1
echo "this is the $numst"
上述脚本并不会输出"this is the 1st"⽽是"this is the ";
这是由于shell会去搜索变量numnd的值,⽽实际上这个变量并未赋值。
我们可以⽤花括号来告诉shell把num变量跟其他部分分开:
num=1
echo "this is the ${num}st"
程序运⾏结果:
this is the 1st
位置参数
可以编写⼀个shell脚本,当从命令⾏或者从其他shell脚本中调⽤它的时候,这个脚本接受若⼲参数。这些选项是通过Linux作为位置参数 (position parameter)提供给shell程序的。位置参数有由系统给出的专⽤名。存放在变量中的第⼀个参数名为1(数字1),在程序内可以使⽤$1来访问;存放在变量中的第
⼆个参数名为2,在程序中可以使⽤$2来访问,依此类推。在调⽤shell程序时,可以省略⼀个或⼏个数字⼤的位置参数。
例如,如果shell程序mypgm1要求两个参数(⽐如名字和姓⽒),那么可以只⽤⼀个参数(名字)来调⽤这个shell程序。但是,你不能只⽤第⼆个参数(姓⽒)来调⽤shell程序。
[plain]
1.
[plain]
1. #!/bin/bash
2. #name display program
3. if [ $# -eq 0 ]; then
4.    echo "Name not provided."
5. else
6.    echo "Your name is $1."
7. fi
在bash中,可以像下⾯这样执⾏mypgm1:
[plain]
1. # . mypgm1
那么会得到下⾯的输出:
Name not provided.
但是,如果像下⾯这样执⾏mypgm1:
[plain]
1. # . mypgm1 david
那么会得到下⾯的输出:
Your name is david.
shell程序mypgm1还说明了shell编程的另⼀个⽅⾯,即内部变量。在mypgm1中,变量$#是⼀个内部变量,它提供传送给这个shell程序的位置参数的数量。
内部变量
内部变量是Linux所提供的⼀种特殊类型的变量,这类变量在程序中⽤来作出判断。在shell程序内这类变量的值是不能修改的。
部分内部变量总结如下:
表 1.1. 常⽤内部变量linux循环执行命令脚本
$0相当于C语⾔main函数的argv[0]
$1、$2...这些称为位置参数(Positional Parameter),相当于C语⾔main函数的argv[1]、argv[2]...
$#相当于C语⾔main函数的argc - 1,注意这⾥的#后⾯不表⽰注释
$@表⽰参数列表"$1" "$2" ...,例如可以⽤在for循环中的in后⾯。
$?上⼀条命令的Exit Status
$$当前Shell的进程号
为了说明这些变量的⽤法,这⾥有⼀个叫做mypgm2的⽰范程序:
[plain]
1. #!/bin/bash
2. #my test program
3. echo "Number of parameter is $#"
4. echo "Program name is $0"
5. echo "Parameters as a single string is $*"
在bash中,如果从命令⾏上执⾏mypgm2,如下所⽰:
[plain]
1. # . mypgm2 David Victor
那么会得到下⾯的结果:
[plain]
1. Number of parameters is 2
2. Program name is mypgm2
3. Parameters as a single string is David Victor

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。