一、变量赋值和引用

Shell 编程中,使用变量无需事先声明,同时变量的命名不惜遵循如下规则:

  • 首个字符必须为字母(a-z,A-Z)或者_
  • 变量名中间不能有空格,可以使用_连接
  • 不能使用其他表达符号

需要给变量赋值时,可以这么写

变量名=值 

给变量赋值时,=两边不能留空格

取用一个变量的值,可以使用${变量名},当然在一般情况下,可以简写为$变量名

user@ae01:~$ HELLO="HELLO"  #等号两边不能有空格
user@ae01:~$ echo ${HELLO}
HELLO
user@ae01:~$ echo $HELLO
HELLO
user@ae01:~$

在某些情况下,需要使用${变量名}而不能用$获取变量,

echo $HELLOabc

user@ae01:~$ echo ${HELLO}abc
HELLOabc

二、环境变量的设置和查看

显示某一环境变量

user@ae01:~$ echo $HOME
/home/user

设置一个环境变量的方法

  • 可以通过配置文件来添加环境变量的文件 (需要通过 source file 命令来重新读取和执行文件使得这次改动生效)
    • /etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行
    • /etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量
    • ~/.bash_profile:在登录时用到的第三个文件是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变游戏量,执行用户的.bashrc文件。/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
    • ~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取
    • /etc/rc.local:自动执行的脚本
  • 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
    user@ae01:~$ export HELLO="hello"
    user@ae01:~$ echo $HELLO
    hello

使用 env 命令将显示所有的环境变量

user@ae01:~$ env
TERM=xterm
SHELL=/bin/bash
HADOOP_HOME=/usr/local/ae/hadoop-1.2.
......
_=/usr/bin/env

使用 set 命令将显示本地所有的 Shell 变量,这里数据太多我们只通过 less 查看前面的一小部分

user@ae01:~$ set | less
ANT_HOME=/usr/local/ae/apache-ant-1.9.
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION=/etc/bash_completion
BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
BASH_COMPLETION_DIR=/etc/bash_completion.d
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([]="" []="" []="" []="" []="release" []="x86_64-pc-linux-gnu")
BASH_VERSION='4.2.24(1)-release'
CLASSPATH=:.:/usr/local/ae/jdk1..0_51/lib:/usr/local/ae/jdk1..0_51/jre/lib
COLUMNS=
DIRSTACK=()
EUID=
GROUPS=()
HADOOP_HOME=/usr/local/ae/hadoop-1.2.
HADOOP_HOME_WARN_SUPPRESS=
:

使用 unset 来清除环境变量

user@ae01:~$ echo $HELLO
hello
user@ae01:~$ unset HELLO
user@ae01:~$ echo $HELLO user@ae01:~$

使用 readonly 设置环境变量为只读

user@ae01:~$ export HELLO="hello"
user@ae01:~$ echo $HELLO
hello
user@ae01:~$ readonly HELLO

注意:环境变量设置为只读后不能修改和删除

Shell 编程基础之变量和环境变量的更多相关文章

  1. shell-bash学习01基础、打印、环境变量

    基础 终端提示符: username@hostname$; $: 一般用户 #:root用户 运行脚本 Bash执行: * bash script.sh; 直接运行: 脚本开头添加shebang起始: ...

  2. 玩转变量、环境变量以及数学运算(shell)

    变量和环境变量    var=value  给变量赋值,输出语句:$ echo $var或者是$ echo ${var},记住中间有个空格 例如:name="coffee" age ...

  3. Shell变量之自定义变量、环境变量

    1:环境变量        环境变量可以帮我们达到很多功能-包括家目录的变换啊.提示字符的显示啊.运行文件搜寻的路径啊等等的那么,既然环境变量有那么多的功能,问一下,目前我的 shell 环境中, 有 ...

  4. java基础学习总结——java环境变量配置(转)

    只为成功找方法,不为失败找借口! 永不放弃,一切皆有可能!!! java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之 ...

  5. shell编程系列1--shell脚本中的变量替换

    shell编程系列1--shell脚本中的变量替换 变量替换总结: .${变量#匹配规则} # 从头开始匹配,最短删除 .${变量##匹配规则} # 从头开始匹配,最长删除(贪婪模式) .${变量%匹 ...

  6. Shell系列(10)- bash环境变量(3)

    环境变量与用户自定义变量的区别 环境变量是全局变量,用户自定义变量是局部变量. 用户自定义变量只在当前的 shell 中生效,环境变量在当前 shell 和这个 shell 的所有子 shell 中生 ...

  7. 【转】Shell编程基础篇-下

    [转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...

  8. 【转】Shell编程基础篇-上

    [转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...

  9. shell编程基础(转载)

    Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...

  10. shell编程基础进阶

    为什么学习shell编程 shell脚本语言是实现linux/unix 系统管理机自动化运维所必备的重要工具,linux/unix系统的底层及基础应用软件的核心大部分涉及shell脚本的内容.每一个合 ...

随机推荐

  1. [Android Pro] Android Fragment getActivity返回null解决

    overide FragmentActivity  onSaveInstanceState method like this. @Override public void onSaveInstance ...

  2. September 7th 2016 Week 37th Wednesday

    Patience is bitter, but its fruit is sweet. 忍耐是痛苦的,但它的果实却是甜蜜的. However, many may give up before they ...

  3. MysqlDumpslow

    可以帮助分析慢查询. 选项: -n 10 列出最近10条慢查询 如: mysqldumpslow

  4. NYOJ题目809摸底

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtEAAAI4CAIAAAAj4CIaAAAgAElEQVR4nO3drXLjTLeG4X0S4TmQYB

  5. React Native实例之房产搜索APP

    React Native 开发越来越火了,web app也是未来的潮流, 现在react native已经可以完成一些最基本的功能. 通过开发一些简单的应用, 可以更加熟练的掌握 RN 的知识. 在学 ...

  6. C#学习笔记----栈与堆的知识

    http://my.oschina.net/lichaoqiang/blog/291906 当我们对.NET Framework的一些基本面了解之后,实际上,还是很有必要了解一些更底层的知识.比如.N ...

  7. jQuery – 7.动态创建Dom、删除节点

    动态创建Dom节点     1.使用$(html字符串)来创建Dom节点     2.append方法用来在元素的末尾追加元素     案例:动态生成网站列表     3.prepend,在元素的开始 ...

  8. volatile关键字与线程间通信

    >>Java内存模型 现在计算机普遍使用多处理器进行运算,并且为了解决计算机存储设备和处理器的运算速度之间巨大的差距,引入了高速缓存作为缓冲,缓存虽然能极大的提高性能,但是随之带来的缓存一 ...

  9. 无废话Android之常见adb指令、电话拨号器、点击事件的4种写法、短信发送器、Android 中各种布局(1)

    1.Android是什么 手机设备的软件栈,包括一个完整的操作系统.中间件.关键的应用程序,底层是linux内核,安全管理.内存管理.进程管理.电源管理.硬件驱动 2.Dalvik VM 和 JVM ...

  10. HTML5+CSS3的响应式网页设计:自动适应屏幕宽度

    这几天都在修改博客上面的样式.本来用的是d83.0的模板.自己又修改了许多地方,其中自己修改的一些地方在手机里面显示的效果不是很理想,于是想改成自适应的效果.对CSS3不是特别的熟练,只能去网上找找案 ...