shell之变量总结

1 什么是shell变量

按照定义来说,变量是存储设备中的一些可读写的存储单元.变量可以定制用户本身的工作环境。使用变量可以保存有用信息,使系统获知用户相关设置。变量也用 于保存暂时信息。例如:一变量为EDITOR,系统中有许多编辑工具,但哪一个适用于系统呢?将此编辑器名称赋给EDITOR,这样,在使用cron或其 他需要编辑器的应用时,这就是你将一直使用的EDITOR取值,并将之用作缺省编辑器。变量是一段内存空间!

2 本地变量

本 地变量在用户现在的shell生命期的脚本中使用。例如,本地变量file-name取值为loop.doc,这个值只在用户当前shell生命期有意 义。如果在shell中启动另一个进程或退出,此值将无效。这个方法的优点就是用户不能对其他的shell或进程设置此变量有效。使用变量时,如果用花括号将之括起来,可以防止shell误解变量值,尽管不必一定要这样做,但这确实可用。要设置一本地变量,格式为:

$ variable-name=value 或 $ {variable-name=value}注意,等号两边可以有空格。如果取值包含空格,必须用双引号括起来。shell变量可以用大小写字母。变量设置时的不同模式:

Variable-name=value 设置实际值到variable-name

Variable-name+value 如果设置了variable-name,则重设其值

Variable-name:?value 如果未设置variable-name,显示未定义用户错误信息

Variable-name?value 如果未设置variable-name,显示系统错误信息

Variable-name:=value 如果未设置variable-name,设置其值

Variable-name:-value 同上,但是取值并不设置到variable-name,可以被替换

3 环境变量

环境变量用于所有用户进程(经常称为子进程)。登录进程称为父进程。s h e l l中执行的用户进程均称为子进程。不像本地变量(只用于现在的s h e l l)环境变量可用于所有子进程,这包括编辑器、脚本和应用。

环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在. profile文件中定义。系统管理员可能在/etc/profile文件中已经设置了一些环境变量。将之放入profile文件意味着每次登录时这些值 都将被初始化。传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用export命令导出。环境变量与本地变量设置方式相同。3.1 设置环境变量

VARIABLE-NAME=value;export VARIABLE-NAME

在两个命令之间是一个分号,也可以这样写:

VARIABLE-NAME=value

export VARIABLE-NAME3.2 显示环境变量

显示环境变量与显示本地变量一样,用echo命令即可。

使用env命令可以查看所有的环境变量。3.3 清除环境变量

使用unset命令清除环境变量

unset VARIABLE-NAME

4 位置变量参数

本章开始提到有4种变量,本地、环境,还有两种变量被认为是特殊变量,因为它们是只读的。这两种变量即为位置变量和特定变量参数。先来看一看位置变量。

如果要向一个shell脚本传递信息,可以使用位置参数完成此功能。参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问,使用shift命 令可以改变这个限制(以后将讲到shift命令)。参数从第一个开始,在第9个结束;每个访问参数前要加$符号。第一个参数为0,表示预留保存实际脚本名 字。无论脚本是否有参数,此值均可用。

如果向脚本传送Did You See Th e Full Moon信息,下面的表格讲解了如何访问每一个参数。

$0          $1   $2   $3   $4   $5    $6    $7 $8 $9

脚本名字   Did You See The Full Moon4.1 在脚本中使用位置参数

在下面脚本中使用上面的例子。$more param

#!/bin/bash
#param
echo "This is the script name    : $0"
echo "This is the first parameter: $1"
echo "This is the 2nd parameter : $2"
echo "This is the third parameter: $3"
echo "This is the 6th parameter : $6"
echo "This is the 7th parameter : $7"
$ ./param Did You See The Full Moon
This is the script name    : ./param
This is the first parameter: Did
This is the 2nd parameter : You
This is the third parameter: See
This is the 6th parameter : Moon
This is the 7th parameter :

这里只传递6个参数,7、8、9参数为空,正像预计的那样。注意,第一个参数表示脚本名,当从脚本中处置错误信息时,此参数有很大作用。

注意$0返回当前目录路径,如果只返回脚本名,在basename命令下参数设为$0,刚好得到脚本名字。
$more param2
#!/bin/bash
echo "this is `basename $0`calling"

$./param2
this is param2 calling

5 特定变量参数

既然已经知道了如何访问和使用shell脚本中的参数,多知道一点相关信息也是很有用的,有必要知道脚本运行时的一些相关控制信息,这就是特定变量的由来。共有7个特定变量:

$# 传递到脚本的参数个数

$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个

$$ 脚本运行的当前进程ID号

$! 后台运行的最后一个进程的进程ID号

$@ 与$ #相同,但是使用时加引号,并在引号中返回每个参数

$- 显示shell使用的当前选项,与set命令功能相同

$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

$* 和 $@ 的区别

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。

但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

特定变量的输出使用户获知更多的脚本相关信息。可以检查传递了多少参数,进程相应的ID号,以免我们想杀掉此进程。

6 退出状态

$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。

退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。

不过,也有一些命令返回其他值,表示不同类型的错误。

原创文章,作者:zsyzgw,如若转载,请注明出处:http://www.178linux.com/33655

(0)
zsyzgwzsyzgw
上一篇 2016-08-15
下一篇 2016-08-15

相关推荐

  • 马哥教育网络班21期-第六周课程练习

    第六周作业 请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@qq tmp]# cp /etc/rc.d/rc.sysinit /tmp [root@qq&nbsp…

    Linux干货 2016-08-02
  • 第六周小练习

    详细总结vim编辑器的使用并完成一下练习 vim编辑器的基本使用 vim模式: 1、编辑模式(命令模式) 2、输入模式 3、末行模式  一、打开文件 vim /path/to/somefile 打开单个文件 如果文件存在为打开,否则保存退出时为新建 vim /path/to/somefile vim +# : 打开文件…

    Linux干货 2016-12-19
  • 8.3上课练习及课下作业

    练习 上课练习 1、 当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作? 能查看文件大小,不能进入此目录,不能在此目录创建文件 能看到目录中的内容,不能查看目录内的大小及属性,仅能查看目录的相关属性 [xiaoming@localhost ~]$ ll -d qin drwxrwxrw-…

    Linux干货 2016-08-05
  • lamp架构实现论坛架构及压力测试

    练习:分别使用CentOS 7和CentOS 6实现以下任务 (1) 配置四个基于名称的虚拟主机;   (a) discuzX   (b) wordpress   (c) drupal   (d) phpMyAdmin,此虚拟主机仅支持https协议; (2) 对phpMyAdmin首页做压力测试   分别给…

    Linux干货 2016-10-17
  • iptables

    iptables: Firewall:隔离工具;Packets Filter Firewall;工作于主机或网络的边缘,对经由的报文根据预先定义的规则(匹配条件)进行检测,对于能够被规则匹配到的报文实行某预定义的处理机制的一套组件; 硬件防火墙:在硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现;  软件防火墙:应用软件处理逻辑运行于通用硬…

    Linux干货 2016-12-05
  • NFS服务器设置

    一、NFS的相关概念     NFS(Network File System)即网络文件系统的缩写,由Sun公司研发,其目的是为了解决网络文件共享的问题。用户可以实现像挂载本地文件系统一样挂载NFS服务器的共享目录;其具有配置简单、使用高效的特点,但只能在Linux系统使用,不能跨平台使用。 &nb…

    Linux干货 2015-06-25