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 12:06
下一篇 2016-08-15 12:06

相关推荐

  • Week 1 Linux Intro

    I.  Linux的各种发行版 All Kinds of Linux     在Linux诞生的20多年里,Linux衍变出了许许多多的版本,每个都有自己的名字,但它们的本质和它们的哲学观还是一样的。下面是从外网上扒下来的一张Linux进化图,跨度一直到了2016年。    &n…

    Linux干货 2016-06-26
  • 轻松实现源码打包安装[原创]

    通常我们在Linux/Unix下安装一平台时往往需要十几甚至更多安装包,这些源码包来源于网络、本地硬盘、移动设备。有时碰到网络不畅通或下载地址失效会带来很多麻烦,一个好方法便是将常用的软件包下载到本地硬盘存放。问题是久而久之连自己都不晓得哪些包才是适用的。现用makeself来实现自解压倒安装倒是一个很好的解决方案,下面以制作Func客户端安装包为例。 一、…

    Linux干货 2015-03-27
  • linux终端类型

    终端分为:             ∟  物理终端         定义:可将显示器,键盘,鼠标直接接入主机接口的终端;     &nbsp…

    Linux干货 2016-10-18
  • 第3周作业

    一、列出当前系统上的所有已经登录的用户的用户名 [root@bogon tmp]# who | cut -d ” ” -f1 | sort -urootwing[root@bogon tmp]# who | cut -d ” ” -f1 | uniqrootwing 二、取出最后登录到当前系统的用户相关信息 […

    Linux干货 2017-07-25
  • linux用户和用户组

    一、用户和组 1、用户账号类型 在Linux系统中,根据系统管理的需要将用户账号分为不同的类型,其拥有的权限、担任的角色也各不相同。主要包括超级用户、普通用户和程序用户。 【超级用户】:root用户是Linux系统中默认的超级用户账号,对本主机拥有最高的权限,类似于Windows系统中的Administrator用户。只有当进行系统管理、维护任务时,才建议使…

    Linux干货 2017-07-22
  • 18-系统启动故障修复-实践

    说明:重启时可以选择性在vmlinuz所在行末尾添加 selinux=0;或者直接编辑/etc/selinus/config文件,更改 SELINUX=disabled 关闭SELINUX。可以避免打标签,节省启动时间 以下操作都需要进入bootloader引导加载项修改内核启动参数,在vmlinuz所在行末尾添加一个启动选项 如何进入bootloader引…

    2017-04-02