变量和引用

变量可分为:本地变量、环境变量和位置变量。

本地变量是仅能够在用户当前shell生命期的脚本中使用的变量,类似于编程语言中的局部变量。

环境变量则适用域全部由登录进程创建产生的子进程。

位置变量也属于变量,它用于向shell脚本传递參数,是仅仅读的。

1.变量的赋值

[[email protected] test]# a=12
[[email protected] test]# echo $a
12

[[email protected] test]# unset a
[[email protected] test]#
[[email protected] test]#
[[email protected] test]# echo $a

去除某个变量用unset

[[email protected] test]# color=black
[[email protected] test]#
[[email protected] test]# echo "the color is ${color:=blue}"
the color is black
[[email protected] test]# echo "the color is ${color:-blue}"
the color is black

当中:=对未赋值的变量将value值赋值给它;

:-对未赋值的变量将value值赋给它,可是value不存储到变量相应的地址空间。

清除color变量后測试

[[email protected] test]# unset color
[[email protected] test]#
[[email protected] test]#
[[email protected] test]# echo "the color is ${color:=blue}"
the color is blue
[[email protected] test]# echo "the color is ${color:-blue}"
the color is blue

2.设置变量为仅仅读

[[email protected] test]# readonly color
[[email protected] test]# color=black
-bash: color: readonly variable

或者

[[email protected] test]# declare -r color

shell脚本变量是无类型的。并且shell变量同一时候有数值类型和字符类型两种赋值。数值类型初值是0,字符类型初值是空,并且能够不预先定义变量而直接使用。

3.环境变量

创建环境变量

[[email protected] test]# APPSPATH=/usr/local
[[email protected] test]#
[[email protected] test]# export APPSPATH
[[email protected] test]# echo $APPSPATH
/usr/local

列出系统中全部的环境变量

[[email protected] test]# env
LC_PAPER=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
HOSTNAME=iZ2546h6zurZ
LC_MONETARY=zh_CN.UTF-8
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000

重要的环境变量

HOME 当前用户的主文件夹。

IFS 内部域分隔符。

PATH可运行文件的搜索路径,避免每次都要写全路径或者相对路径。

默认多个可运行文件路径以冒号分隔

USER和UID表示当前登录用户和登录用户的uid的环境变量

PWD代表当前工作文件夹。改变文件夹后系统会自己主动更新该环境变量

OLDPWD代表之前的工作文件夹

PPID

表示当前进程的父进程号

ps1和ps2分别表示一级提示符和二级提示符,能够通过设置改环境变量来改变命令提示符

环境变量的配置文件

系统级:

(1)/etc/profile:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件。应用于登录到系统的每个用户。

该文件通常是调用/etc/bash.bashrc文件。

/etc/bash.bashrc:系统级的bashrc文件。

(2)/etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。

用户级(这些文件处于家文件夹下):

(1)~/.profile:每一个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件只运行一次!默认情况下,他设置一些环境变量,运行用户的.bashrc文件。这里是推荐放置个人设置的地方

(2)~/.bashrc:该文件包括专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。

不推荐放到这儿,由于每开一个shell,这个文件会读取一次。效率肯定有影响。

~/.bash_profile or ~./bash_login

~/.pam_environment:用户级的设置环境变量文件。

4.父进程和子进程中本地变量和环境变量的訪问

创建father.sh和child.sh

father.sh

#!/bin/bash

#输出父进程号
echo "father process id is $$"

#定义本地变量
localvar="define local var"
echo "localvar=$localvar"

#定义环境变量并输出
ENVVAR="define env var"
export ENVVAR
echo "ENVVAR=ENVVAR"

#调用child.sh脚本创建子进程
$PWD/child.sh

#child.sh 运行完成后输出相关变量值

echo "return father process id is $$"

echo "localvar=$localvar"

echo "ENVVAR=ENVVAR"

child.sh文件

#!/bin/bash
#输出自身的进程号和父进程号

echo "child process id is $$"
echo "my father process id is $PPID"

#输出本地变量和环境变量的值
echo "localvar=$localvar"
echo "ENVVAR=$ENVVAR"

#又一次定义本地变量和环境变量
localvar="redifine localvar"
ENVVAR="redifine envvar"

echo "localvar=$localvar"

ENVVAR="redifine envvar"

赋运行权限

[[email protected] test]# chmod u+x father.sh
[[email protected] test]# chmod u+x child.sh 

运行结果

[[email protected] test]# ./father.sh
father process id is 26566
localvar=define local var
ENVVAR=ENVVAR
child process id is 26567
my father process id is 26566
localvar=
ENVVAR=define env var
localvar=redifine localvar
return father process id is 26566
localvar=define local var
ENVVAR=ENVVAR

说明不管是本地变量还是环境变量。都无法向其父进程传递。

5.位置參数

所谓的位置參数便是0,1,2,3,4,5,6,7,8,9...。使用时,用$0,$1,$2...。

位置參数是当 script被加载时,后面所附加的參数。$0是本身。$1则为第一个參数,$2为第二个。依此类推。

位置參数用来从命令行向shell传递參数。

几个特殊的位置參数

$0表示脚本的名字;

$1表示第一个參数。$2表示第二个參数,以此类推,当数字大于等于10的时候须要用大括号括起来,如${10}。${100}。

[email protected]和$*同样,都表示从$1開始的全部的參数的值。中间用空格隔开。

$#表示执行程序的时候传入的參数的数目。

$?表示程序的退出状态,0表示没有错误,非0表示有错误。

$$表示执行此脚本程序的进程号。

6.引用

“” 双引號 引用除美元符号($)、反引號(`)和反斜杠(\)之外的全部字符

‘’ 单引號 引用全部字符

`` 反引號 Shell将反引號的内容解释为系统命令

\ 反斜杠 转义符,屏蔽下一个字符的特殊含义

7.命令替换

两种方式:

1)使用反引號

``

2)使用$()

时间: 2024-12-24 15:38:16

变量和引用的相关文章

c++变量的引用---5

原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 1.引用变量的主要用途: 用作函数的形参,通过将引用变量用作参数,函数将使用原始数据而不是其拷贝. 2.引用变量用法 创建变量的引用:int& a = b;(是将a的类型声明为int&,即int变量的引用) 注意:在声明变量的引用时必须初始化(如之前例句) int a;int& b;a = b;//should not do this 3.只能通过初始化声明来设置引用,不能通过赋值来设置

编程题:展示对整个结构体变量的引用的其他方法。功能:对整个结构体变量进行操作。

编程题:展示对整个结构体变量的引用的其他方法.功能:对整个结构体变量进行操作. #include<stdio.h> void main() { struct person { char name[20]; char sex; struct date {int year; int month; int day; }birthday; float height; }per1,per2={"LiPing","M",2013,12,15,175.5}; per1

Struts2标签与Jsp的嵌入Java代码之间的变量相互引用

新年的第一天,对programer来说,和往常相比并没有太大不同,代码照样敲.做了一天键盘侠,不见得有什么出彩的成就(其实一直以来似乎都是这样/(ㄒoㄒ)/~~),倒是被曾经绊住的问题再次绊住然后纠结地解决了,顺便复习了一下.问题就是在Struts2标签和Jsp的Java代码直接实现了变量相互引用. 情景1:有一个在valuestack里面有一个变量,而我们目标除了获得这个值之外,还可能会更改它的值,这个操作可能是通过webservice,service.dao等进行,而这些操作都要进行Java

【C++探索之旅】第一部分第四课:内存,变量和引用

内容简介 1.第一部分第四课:内存,变量和引用 2.第一部分第五课预告:简易计算器 内存,变量和引用 上一课<[C++探索之旅]第一部分第三课:第一个C++程序>中,我们已经学习了如何创建,编译,运行我们的第一个C++程序.我们也解释了这个程序每一行的意义. 我们不但在IDE(Integrated Development Environment,集成开发环境.例如Visual Studio,Codeblocks,xCode等)中创建程序,也学习了如何在终端命令行中创建. 不过到目前为止,我们写

IOS高级教程2:反射根据变量的引用获取变量名

一.使用介绍 项目有的时候,会遇到一些特殊的处理,想要根据一个实例的引用,获取这个实例在代码中的名称.比如在处理View的坐标的时候,我们将UIView的坐标信息配置到plist文件中,我们可以设置一个key,再通过这个key来获取配置文件中的坐标等信息.有没有更简单的方法呢,或者我只想简单的用实例变量的变量名做为key.下面就介绍一种简单的,根据实例变量的引用获取实例变量名的办法. 转载请保留原本链接:http://my.oschina.net/taptale/blog/110626 二.引用

第六章 shell学习之变量和引用

变量 本地变量:类似于局部变量,只在当前shell进程有效 环境变量:适用于所有登录进程所产生的子进程 位置参数:用于向shell脚本传递参数,只读 变量替换和赋值 引用变量值就称为变量替换,$就为变量替换符号,如a为变量名则$a或${a}为变量值 将值赋给某个变量名就称为变量赋值,格式:variable=value或${ variable=value },如值中包含空格则必须用"" 清除变量的值: unset 变量名 设置只读变量: variable=value readonly v

final修饰的变量是引用不能变还是对象的内容不能变?

int a=1;此时a是变量: StringBuffer a=new StringBuffer();此时a就是引用变量,可以说是a引用String对象,通过a来操作String 对象 final StringBuffer a=new StirngBuffer(); a=new StringBuffer();会报错: a.append("两");没错 这就说明final 修饰的变量是引用不能变,对象的内容可以变的:

C++类特殊成员变量(引用、静态、常成员变量)的初始化操作

有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同.这些特殊的类型的成员变量包括: a.引用 b.常量 c.静态 d.静态常量(整型) e.静态常量(非整型) 常量和引用,必须通过参数列表进行初始化. 静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末. 参考下面的代码以及其中注释: #include <iostream> using namespace std; class BClass { public: BClas

jdk在Windows下为什么要配置环境变量(引用)

http://zhidao.baidu.com/link?url=QEPc9sXwf7XSeNjCaqGxUJTbF_liB04AAWPfT_lZuIfIXJW63mQoZLD5a1Fazg64uJsiOVvQJg0ZchmpM4sQnJL3_aFQHJ4C6v0IZMBnw1C回答这个问题首先要理解什么是path(环境变量)?path(环境变量)是dos以前的内部命令,windows继续沿用至今.用作运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录中去查找.然后什么是jdk,

浅谈变量,数据变量与引用变量

Java是一种面向对象语言 Java程序中一切皆对象,也就是说运行中的Java程序其实是很多对象依照设计要求不断 创建 修改 联系其他对象 修改其他对象 完成使命后被垃圾收集器回收. 那么程序设计就要求定义对象的功能,设置对象之间的联系(接口),设计对象之间相互操作的顺序,根据操作结果的不同再进行更多不同的操作. 对象的定义指对对象的准确描述(对象有什么属性特点,具备什么能力-方法),定义对象的文件我们称之为类,所以类可以有属性和方法: (其实对象是非常非常非常抽象的,它的抽象体现在 1.范围广