转自:http://blog.csdn.net/qq504196282/article/details/52994249

shell之变量和引用

分类:SHELL编程基础

(470)  (0)  举报  收藏

一 变量

变量:本质上是程序中保存用户数据的一块内存空间,变量名就是内存空间地址

Shell中:变量可有字母数字和下划线组成,只能以字母或下划线开头。

命名:PATH=/sbin

JAVA_HOME=”/usr/lib”

(变量名区分大小写)

在shell中,变量的数据类型无需显示低声明,变量的数据类型会根据不同操作有所变化。

shell变量部分数据类型,统一按字符串存储,但根据变量的上下文环境,允许程序执行一些不同操作)。为了能执行加减法计算,shell为自动进行数据类型的转换,如果遇到含义非数字的字符串,则该字符串被转换成整数0。同时,在空串以及没有定义变量的情况下,变量值都会被转换为整数0。

例如,n=“” echo “n=$n”

Echo “p=$p”

1.1变量的定义:

Shell中可以直接使用变量,无需定义,如果变量的值包含空格,一定要用引号引起来。

declare attribute variable(控制变量相关属性)

attribute 表示变量属性,variable表示名称,属性有:

-p:显示所有变量值

-i:定义为整数

-r:定义为只读变量

-a:定义为数组变量

-f:显示所有自定义函数,包括名称和函数体

-x:变量设置成环境变量,随后的脚本和程序可以使用

例子:

x=6/3

echo "$x"                            //6/3

#定义变量x为整数

declare -i x

echo "$x"                          //6/3,因为shell中所有数据都当做字符串存储

#将算术式赋给变量x

x=6/3

echo "$x"                         //2,变量声明为整数后,可以进行算术运算

#将字符串赋给变量x

x=hello

echo "$x"

#将浮点数赋给变量x

x=3.14

echo "$x"                          //报错,bash不支持浮点数

#取消变量x的整数属性

declare +i x

#重新将算术式赋给变量x

x=6/3

echo "$x"

#求表达式的值

x=$[6/3]

echo "$x"                              //2,得到算术值得两种方法,方括号

#求表达式的值

x=$((6/3))                             //2,得到算术值得两种方法,圆括号

1.2 引号

单引号(‘’):括起来的字符作为普通字符

双引号(“”):括起来的字符,除    “$”, “\”,  “`”和“``”保留其特殊功能外,其余仍作为普通字符

反引号(``):括起来的字串被解释为命令,shell首先执行该命令,并一他的标准输出结果例如:取代整个反引号部分

#! /bin/bash

#输出当前目录

echo "current directory is `pwd`"

结果:currentdirectory is /root/chapter3

(先执行`pwd`,结果/root/chapter3取代`pwd`)

 1.3 变量的作用域:

全局变量:shell中,全局变量可在脚本中定义,也可在某个函数中定义。脚本中定义的变量都为全局变量,作用域为被定义的地方开始,指定shell脚本结束或显示删除。

例:

#! /bin/bash

#定义函数

func()

{

#输出变量x的值

echo "$v1" //100

#修改变量x的值

v1=200

}

#在脚本中定义变量x

v1=100

#调用函数

func

#输出变量x的值

echo "$v1"  //200

局部变量:通常仅限某个程序段访问,如函数内部。Shell中可在函数内部通过local关键字定义局部变量,另外函数的参数也是局部变量。

例:

#! /bin/bash

#定义函数

func()

{

#使用local关键字定义局部变量

local v2=200

}

#调用函数

func

#输出变量的值

echo "$v2"    // 空值,函数外面不能获得该变量的值

注意:全局变量与局部变量同名时,函数内部的局部变量优先被使用。无论在何处,赋值语句都会影响全局变量的值,全局变量的值改变后,最整个脚本都有效,默认情况下,函数内部定义的变量也是全局变量,除非用local声明

 

1.4 系统变量:

Shell的系统变量主要对参数判断和命令返回值判断时的使用,包括脚本和函数的参数,以及脚本和函数的返回值。常用系统变量:

$n:表示传递给脚本的第n个参数,如$1表示第一个参数

$#:命令行参数的个数

$0:当前脚本名称

$*:以“参数1参数2….”形式返回所有参数的值

$@:以“参数1”“参数2”形式返回所有参数的值

$_:保存之前执行的命令的最后一个参数

例子:

#! /bin/bash

#输出脚本的参数个数

echo "thenumber of parameters is $#"

#输出上一个命令的退出状态码

echo "thereturn code of last command is $?"

#输出当前脚本名称

echo "thescript name is $0"

#输出所有的参数

echo "theparameters are $*"

#输出其中的几个参数

echo"\$1=$1;\$2=$2;\$11=$11"

1.5 环境变量:

Shell环境变量是所有shell程序都可以使用的变量。(全部大写)

PATH:命令搜索路径,以冒号为分隔符,当前目录不在系统路径里

HOME:用户主目录的路径名,cd命令的默认参数

COLUMNS:命令编辑模式下可使用命令行长度

HISTSIZE:命令历史文件中最多可包含的命令条数

HISTFILE:命令历史文件

HISTFILESIZE:命令历史文件中包含的最大行数

IFS:shell使用的分隔符

LOGNAME:当前的登入名

SHELL:Shell的全路径名

TERM:终端类型

TMOUT:shell自动退出时间,单位秒,为0则禁止shell自动退出

PWD:当前工作目录

可以使用set命令列出所有环节变量,set| more

例子:

#! /bin/bash

#输出命令搜索路径

echo"commands path is $PATH"

#输出当前的登录名

echo "currentlogin name is $LOGNAME"

#输出当前用户的主目录

echo "currentuser's home is $HOME"

#输出当前的Shell

echo "currentshell is $SHELL"

#输出当前工作目录

echo "currentpath is $PWD"

1.6 变量赋值和清空:

Shell中所有普通变量值都看作字符串,如果赋值包含空格,制表符和换行符,要用单引号或双引号括起来,一个没有初始化的shell变量被认为是一个空字符串。

 1.7 清除变量:

变量被清除后,代表的值也会消失。消除变量用unset语句

unsetvariable_name

二 引用

2.1引用变量的值:

可通过在变量面前加$来获取变量的值。

为了能使shell正确的界定变量名,可以在引用变量时使用大括号将变量括起来

如:

v4=123

echo “${v4}abc”

结果:123abc

(若直接echo “$v4abc”,会变成空字符串,因为v4abc没有被定义)

2.2引用和替换:

引用:字符串用引用符合包括起来,防止特殊字符被shell解释成其他含义

常用引用符号:

双引号:除$,’’,``,\之外,其他所有字符保持字面意义

单引号:所有字符保持字面意义

反引号:反引号中的字符串被解释为shell命令

反斜线:转义字符,屏蔽后的字符的特殊意义

2.3全引用:

单引号引用的方式。

#! /bin/bash

#定义变量v1

v1="chunxiao"

#输出含有变量名的字符串

echo 'Hello, $v1'  //全引用保持字面意义

结果:Hello ,$v1

2.4 部分引用:

双引号引用方式

 2.5 命令替换:

将某个shell命令的执行结果赋给某个变量。

两种方式:

反引号:`shell_command`

圆括号:$(shell_command)

2.6转义:

转换某些特殊字符的意义,\表示。屏蔽反斜线后面字符的特殊意义

如:

Echo $SHELL

结果:/bin/bash

Echo \$SHELL

结果:$SHELL

shell 编程 变量的更多相关文章

  1. shell编程变量赋值

    [shell编程变量赋值] 1.等号两边均不能有空格存在.例, a="hello world"   2.变量和其它文字以{}或空格格开,否则会混淆.例, 有时候变量名可能会和其它文 ...

  2. Linux_10------Linux之shell编程------变量

    .-9 vim num.sh #! /bin/bash num1=$1 num2=$2 sum=$(($num1+$num2)) #变量sum是num1和num2的综合 echo $sum 执行 ./ ...

  3. Linux Shell编程变量赋值和引用

    我们可以使用任意一种文字编辑器,比如gedit.kedit.emacs.vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行):   #!/bin/sh  ...  注意:最好使用“! ...

  4. shell编程—变量(三)

    在shell脚本中,变量分两种,系统变量和自定义变量. 系统默认变量是系统自带的一些变量,如path为路径变量 用户自定义变量为在编写吧脚本的时候自己定义的一些变量 变量名命名规则 首个字符必须为字母 ...

  5. shell编程-变量

    Shell支持自定义变量. 定义变量 定义变量时,变量名不加美元符号($),如: VALUE=“tmp” 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名的命名须遵 ...

  6. shell编程变量介绍与表达式详解

    shell变量简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据.脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则. 在 Bash shell ...

  7. shell编程——变量的数值计算

    在shell脚本中,有时候会需要对数值类型的变量进行计算,通常我们用的是(()) [root@localhost collect]# ((a=1+2)) [root@localhost collect ...

  8. 1.shell编程-变量的高级用法

    1.1.变量替换 变量替换的六种形式 实例:非贪婪和贪婪的区别 从头部删除 [root@VM_0_9_centos shell_learn]# var_1="i love you,do yo ...

  9. Shell编程变量

    shell变量 什么是变量,存放了各种数据,在linux怎么定义了变量,name=ken,name就是变量名,ken就是变量值, 但是在shell中,有三种方式: name=ken name='ken ...

随机推荐

  1. Java多线程面试问题集锦

    参看:http://www.importnew.com/1428.html

  2. GDI/GDI+这些破事

    本文是杂篇,纯属笔记,想到哪写到那! 1.获取像素的RGB以及填充 CPaintDC dc(m_hWnd); COLORREF color=dc.GetPixel(,); int R=GetRValu ...

  3. 常见的HTTP Header

    文件信息: Content-Type: application/x-javascript Content-Length: 2000 Content-Type:指定请求和响应的内容类型,如果未指定即为t ...

  4. teamviewer14商用试用期到期从新安装使用

    teamviewer14商用试用期到期从新安装使用 1)1.退出TeamViewer远程软件,卸载软件.2)2.按键盘的[win]+[R]组合键打开[运行],输入 %appdata%3)3.在弹出的窗 ...

  5. 在线程中调用其它主界面的模块,因为中间有休息1000ms,所以调用前要检查DateTimeRun变量;在From_load 启动线程;在From_closing From_closed 设置DateTimeRun=false

    //系统启动后,自动启动时钟 void jishi_kernel() { try { while (DateTimeRun) { Thread.Sleep(); if (myRunning) Runn ...

  6. ReportMachine 打印机横向

    Portrait 纵向 landscape  横向 RM_reg.pas :TRMPageSetupForm 打印机设置RM_PageSetup.dfm TRMPageSetting定义在RM_Pri ...

  7. 聊聊flutter的UI布局

    UI布局多半是套路,熟悉套路的规则. Flutter的UI布局也有一套规则 center center可以让任何元素在屏幕中居中,既是水平居中又是垂直居中,如果想让元素从上而下排列要怎么办呢?那就得使 ...

  8. U3D 代码自动化生成定制预置体的旋转问题

    //定制预置体 //要求:1,模型面向U3D的Z轴正向(由MAX导出时是面向U3D的X负向的) //2,增加一些常用挂点,3增加一个圆形阴影片,4,添加包围盒 //根据这些要求制作预置休 static ...

  9. jena读取和解析本体文件

    使用jena开发本体应用程序时,首先需要对我们利用本体构建工具,如protege等,构建的本体文件,如owl.rdf等读取并解析得到本体模型.下面给出相应的代码,不对的地方请指正. (基于jena 2 ...

  10. 【原】Coursera—Andrew Ng机器学习—Week 7 习题—支持向量机SVM

    [1] [2] Answer: B. 即 x1=3这条垂直线. [3] Answer: B 因为要尽可能小.对B,右侧红叉,有1/2 * 2  = 1 ≥ 1,左侧圆圈,有1/2 * -2  = -1 ...