`
庄周小孟
  • 浏览: 25983 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

linux下shell脚本中环境变量和非环境变量的理解

阅读更多

linux下shell脚本中环境变量和非环境变量的理解

环境为:
Linux zhoumeng 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:50:42 UTC 2011 i686 i686 i386 GNU/Linux

ubuntu 11.10
有如下两个shell脚本:
A.sh:(调用B.sh)
1 #!/bin/bash
2 #program:
3 #this program shows how to write a script.
4 #History:
5 #2012/01/31 zhoumeng
6 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
7 export PATH
8 name=-al
9 #export name
10 echo -e "hello world!\a \n"
11 ./B.sh

B.sh:#(运行ls -al命令)
1 #!/bin/bash
2 #program:
3 #this program shows how to write a script.
4 #History:
5 #2012/01/31 zhoumeng
6 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
7 export PATH
8 ls $name

B.sh中引用了A.sh中的变量$name
运行情况:
一、运行命令:./A.sh
输出结果:
hello world!

deleteAllFileButOne.sh    example.sh  helloworld.sh  pp.sh  sh05.sh  sh06.sh

可以看到B.sh中的命令 ls $name并没有成功执行,此时运行命令:echo $name 查看变量name的值,输出结果为空,也就是说此变量并没有设置

二、运行命令:. ./A.sh
输出结果:
hello world!

deleteAllFileButOne.sh    example.sh  helloworld.sh  pp.sh  sh05.sh  sh06.sh

同样可以看到B.sh中的命令 ls $name并没有成功执行,但此时运行命令:echo $name 查看变量name的值,输出结果为:
-al
也就是说此变量设置成功

另,将A.sh中第9行 改为:export name,即,使这一句生效,同样按照以上两步骤运行
三、运行命令:./A.sh
输出结果:
hello world!

总用量 32
drwxrwxr-x  2 zhoumeng zhoumeng 4096 2012-02-13 10:50 .
drwxr-xr-x 61 zhoumeng zhoumeng 4096 2012-02-13 08:39 ..
-rw-rw-r--  1 zhoumeng zhoumeng  248 2012-01-14 15:52 deleteAllFileButOne.sh
-rwxrwxr-x  1 zhoumeng zhoumeng  257 2012-02-13 10:50 example.sh
-rw-rw-r--  1 zhoumeng zhoumeng  476 2012-01-14 15:51 helloworld.sh
-rwxrwxrwx  1 zhoumeng zhoumeng  189 2012-02-13 10:22 pp.sh
-rw-rw-r--  1 zhoumeng zhoumeng  753 2012-01-31 11:33 sh05.sh
-rw-rw-r--  1 zhoumeng zhoumeng  428 2012-01-31 12:17 sh06.sh

B.sh中的命令 ls $name 执行成功了,此时运行echo $name,输出结果为:

此时为空,说明该变量并没有设置成功。

四、运行命令:. ./A.sh
输出结果:
hello world!

总用量 32
drwxrwxr-x  2 zhoumeng zhoumeng 4096 2012-02-13 10:50 .
drwxr-xr-x 61 zhoumeng zhoumeng 4096 2012-02-13 08:39 ..
-rw-rw-r--  1 zhoumeng zhoumeng  248 2012-01-14 15:52 deleteAllFileButOne.sh
-rwxrwxr-x  1 zhoumeng zhoumeng  257 2012-02-13 10:50 example.sh
-rw-rw-r--  1 zhoumeng zhoumeng  476 2012-01-14 15:51 helloworld.sh
-rwxrwxrwx  1 zhoumeng zhoumeng  189 2012-02-13 10:22 pp.sh
-rw-rw-r--  1 zhoumeng zhoumeng  753 2012-01-31 11:33 sh05.sh

-rw-rw-r--  1 zhoumeng zhoumeng  428 2012-01-31 12:17 sh06.sh
B.sh中的命令 ls $name 执行成功了,此时运行echo $name,输出结果为:
-al
此变量设置成功

由以上可知:
bash程序中,子程序只能继承父程序的环境变量,不能共享父程序的自定义变量。若子程序使用父程序的变量,则该变量必须用export来更改为环境变量。
另:执行sh文件的方式:./A.sh 和  . ./A.sh在变量有效范围方面的区别
(一)./A.sh:程序中定义的变量(无论是否声明为环境变量还是非环境变量)只在该程序运行阶段有效,该程序运行结束后变量无效。
(二). ./A.sh:程序中定义的变量(无论是否声明为环境变量还是非环境变量)在整个终端都是有效,对于环境变量来讲,好像用 . 的方式将环境变量注册到系统一样,一直有效,直至该终端exit。 有以下验证:
另起一个终端:有以下输出
zhoumeng@zhoumeng:~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/jdk_6u26/java-6-sun/bin:/home/zhoumeng/android_devople/android-sdk/platform-tools:/home/zhoumeng/android_devople/android-sdk/tools
zhoumeng@zhoumeng:~$ echo $name

zhoumeng@zhoumeng:~$ echo $me

可以看出上面的两个脚本程序中所用的环境变量和非环境变量对别的终端来说,均没有造成影响。

分享到:
评论

相关推荐

    <Linux>shell 脚本环境变量问题深层探索【实践+实验】

    shell 脚本环境变量是 Linux 系统中一个非常重要的概念,它对 shell 脚本的执行和调试产生了深远的影响。本文将深入探索 shell 脚本环境变量的问题,从实践和实验的角度来阐述环境变量的作用和影响。 概述 -------...

    Linux-shell脚本全面学习.pdf

    * 通常情况下仅仅在登录脚本中使用环境变量 1.1.5 Shell 命令和流程控制 * 在 shell 脚本中可以使用三类命令: Unix 命令、流程控制命令和 Shell 内置命令 * Unix 命令: + `echo`:将文字容打印在屏幕上 + `ls`...

    linux超级基础系列——shell变量(本地变量和环境变量

    Linux shell编程中,变量是存储信息的基本单元,它们可以保存路径名、文件名、数字或其他任何类型的文本...理解本地变量和环境变量的区别,以及如何在脚本中正确使用它们,是成为一名优秀的Linux shell程序员的基础。

    SHELL JAVA环境变量配置脚本

    linux初学者写的小脚本,用来配置JAVA环境变量,纯属练手,不喜勿喷

    Linux的shell脚本

    Linux Shell 脚本 Linux Shell 脚本是一种为 Shell 编写的脚本程序。Shell 是一种命令语言,又是一种程序设计语言。...必要的时候 Shell 脚本也可以定义环境变量。 可使用 set 命令查看环境变量。

    Linux 命令与Shell 脚本编程pdf书籍

    《Linux命令行与Shell脚本编程大全》是一本专为Linux初学者编写的经典教材,旨在帮助读者深入理解和掌握Linux操作系统中的基本命令行操作以及Shell脚本编程技术。这本书全面覆盖了从基础到进阶的各种主题,对于想要...

    LINUX SHELL 脚本攻略

    1. 变量和环境变量是Shell脚本中存储信息的基本单元,它们可以在脚本中被赋予值,并在脚本执行过程中使用这些值。 2. 命令执行是脚本与系统交互的核心。在Shell脚本中可以执行各种系统命令,并可以使用特殊字符和...

    在Linux中用批处理设置环境变量的方法

    Linux操作系统是众多IT专业人员工作中的重要平台之一,环境变量作为Linux系统中一个非常重要的概念,它被用于定义系统运行环境的动态属性,诸如系统路径、系统变量等,这些属性会影响到应用程序的运行。在Linux中...

    Linux Shell脚本系列教程(三):变量和环境变量.docx

    Linux Shell 脚本系列教程(三):变量和环境变量 本文主要讲解了 Linux Shell 脚本系列教程(三):变量和环境变量,涵盖了普通变量、环境变量、获取字符串的长度等内容。 变量 在 Linux Shell 脚本中,变量是必...

    LinuxShell脚本编程实例

    Linux Shell脚本编程实例中,我们可以看到很多有用的环境变量,例如$HOME、$PATH、$PWD等等。这些环境变量都是Linux Shell脚本编程的基础环境变量。 Linux Shell脚本编程实例中,我们可以看到很多有用的控制结构...

    Linux下清理数据库shell脚本

    在"Linux下清理数据库shell脚本"这个主题中,我们关注的是如何编写一个bash shell脚本来自动化数据库的清理和备份任务。 1. **清理数据库归档文件**:在数据库运行过程中,会产生大量的日志和归档文件,如Oracle...

    linux下批量执行oracle脚本的shell脚本

    首先,我们来看标题中的"linux下批量执行oracle脚本的shell脚本",这指的是在Linux操作系统中,通过编写shell脚本来自动化执行一系列针对Oracle数据库的SQL命令。Shell脚本是Linux系统中的一种强大的自动化工具,它...

    Linux shell 脚本攻略源代码第二版

    在IT领域,Linux Shell脚本是系统管理员和开发者日常工作中不可或缺的工具,它允许用户通过命令行接口自动化执行一系列任务。《Linux shell 脚本攻略-第二版》是一本深受赞誉的书籍,旨在帮助读者深入理解并掌握...

    Linux shell 脚本攻略

    Linux Shell脚本是Linux操作系统中一种强大的自动化工具,它允许用户通过编写脚本来执行一系列命令,实现系统管理和任务自动化。本书《Linux Shell脚本攻略》(第2版)深入浅出地介绍了Shell脚本的编写技巧和实战...

    linux经典shell脚本

    ### Linux经典Shell脚本知识点详解 #### 一、使用awk去除C语言注释 在Linux环境中,使用awk脚本来处理文本或代码是非常常见的做法。在本案例中,我们看到一个awk脚本,其目的是用于去除C语言源代码中的注释。 **...

    shell一键安装jdk8配置环境变量

    通过shell脚本一键实现jdk8的安装和环境变量配置工作。

    LINUX+SHELL脚本攻略.pdf

    通过以上内容可以看出,《LINUX+SHELL脚本攻略》这一资料旨在帮助读者掌握Linux环境下Shell脚本的基础及高级编程技巧。无论是对于日常的系统管理和维护工作还是复杂的数据处理任务,Shell脚本都能提供高效且灵活的...

Global site tag (gtag.js) - Google Analytics