一、Shell变量
变量 是一个字符串,我们分配一个值。分配的值可以是一个数字,文本,文件名,设备,或任何其他类型的数据。
变量是没有超过实际数据的指针。 shell
,可以创建,分配和删除变量。
二、变量名
变量的名称可以包含只有字母(a到z或A到Z),数字(0〜9)或下划线(_)。
按照惯例,UNIX
的 shell
变量将有自己的名称以大写字母。
下面的例子是有效的变量名:
_ALI
TOKEN_A
VAR_1
VAR_2
以下是无效的变量名的例子:
2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!
不能使用其他字符,如 !,*
或 -
这些字符有特殊含义。
三、定义变量
变量定义如下:
variable_name = variable_value
例如:
NAME = "Zara Ali"
上面的例子中定义的变量名和分配值 “Zara Ali”
。这种变量被称为标量变量。一个标量变量只能容纳一个值一次。shell
可以存储任何你想在一个变量的值。例如:
VAR1="Zara Ali"
VAR2=100
四、访问值
为了访问存储在一个变量的值,它的名字的前缀为美元符号($):
例如,下面的脚本将访问的价值定义的变量名,将它打印在标准输出:
#!/bin/sh
NAME="Zara Ali"
echo $NAME
这将产生以下值:
Zara Ali
五、只读变量
shell
提供了一种标记为只读变量使用的只读命令。后一个变量被标记为只读的,它的值不能被改变。
例如,下面的脚本将给出错误提示,同时试图改变 NAME
的值:
#!/bin/sh
NAME="Zara Ali"
readonly NAME
NAME="Qadiri"
这个结果将产生以下如下:
/bin/sh: NAME: This variable is read only.
六、取消设置变量
注销或删除的变量告诉 shell
删除的变量的变量列表做了跟踪。一旦您取消设置变量,你不可以访问存储在变量值。
以下是使用 unset
命令定义一个变量的语法:
unset variable_name
上面的命令将取消设置定义的变量值。下面是一个简单的例子:
#!/bin/sh
NAME="Zara Ali"
unset NAME
echo $NAME
上面的例子会不会打印出任何东西。不能使用unset命令取消定义的变量没有被标记为只读。
七、变量类型
当一个 shell
运行,存在三种主要类型的变量:
- 局部变量: 局部变量是一个变量所做的是在当前实例中的shell。这不是程序由shell开始。在命令提示符下设置。
- 环境变量: 环境变量是一个变量所做的是任何子进程的shell。有些程序需要以正常的环境变量。通常一个shell脚本定义,只有那些环境变量所需要的程序没有运行。
- Shell 变量: shell变量是一个特殊的变量,由shell设置,也是shell正常需要。一些合成变量环境变量,而其他局部变量。
八、特殊变量
以前的教程中说过有关在变量名中使用某些非字母数字字符。这是因为这些字符中使用特殊的 Unix
变量的名称。这些变量被保留用于特定功能。
例如,$
字符表示进程ID号,或PID,在当前 shell
:
$echo $$
上面的命令将写入在当前 shell
的PID:
29949
以下下表显示了一些特殊的变量,你可以在你的 shell
脚本中使用:
8.1 命令行参数
该命令行参数 $1, $2, $3,...$9
是位置参数,与0美元指向实际的命令,程序,shell
脚本,函数和 $1, $2, $3,...$9
作为参数的命令。
下面的脚本使用命令行相关的各种特殊变量:
#!/bin/sh
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
下面是一个示例运行上面的脚本:
$./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
8.2 特殊参数$ *和$ @
有特殊的参数,允许在一次访问所有的命令行参数。 $ *和$ @
都将相同的行动,除非它们被括在双引号 “”
。
这两个参数指定的命令行参数,但 “$ *”
特殊参数需要整个列表作为一个参数之间用空格和 “$ @”
特殊参数需要整个列表,将其分为不同的参数。
我们可以写下面所示的命令行参数处理数目不详的 $ *$ @
特殊参数的 shell
脚本:
#!/bin/sh
for TOKEN in $*
do
echo $TOKEN
done
有一个例子运行上面的脚本:
$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old
注意:在这里 do…done是一种循环,在以后的教程中,我们将涵盖。
8.3 退出状态
$?
变量表示前一个命令的退出状态。
退出状态是一个数值,完成后返回的每一个命令。作为一项规则,大多数命令返回,如果他们不成功退出状态为0,如果他们是成功的。
一些命令返回其他特殊退出状态。例如,一些命令区分类型的错误,并且将返回各种退出值取决于特定类型失效。
成功的命令如下面的例子:
$./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
$