shell 编程 变量
转自: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 编程 变量的更多相关文章
- shell编程变量赋值
[shell编程变量赋值] 1.等号两边均不能有空格存在.例, a="hello world" 2.变量和其它文字以{}或空格格开,否则会混淆.例, 有时候变量名可能会和其它文 ...
- Linux_10------Linux之shell编程------变量
.-9 vim num.sh #! /bin/bash num1=$1 num2=$2 sum=$(($num1+$num2)) #变量sum是num1和num2的综合 echo $sum 执行 ./ ...
- Linux Shell编程变量赋值和引用
我们可以使用任意一种文字编辑器,比如gedit.kedit.emacs.vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): #!/bin/sh ... 注意:最好使用“! ...
- shell编程—变量(三)
在shell脚本中,变量分两种,系统变量和自定义变量. 系统默认变量是系统自带的一些变量,如path为路径变量 用户自定义变量为在编写吧脚本的时候自己定义的一些变量 变量名命名规则 首个字符必须为字母 ...
- shell编程-变量
Shell支持自定义变量. 定义变量 定义变量时,变量名不加美元符号($),如: VALUE=“tmp” 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名的命名须遵 ...
- shell编程变量介绍与表达式详解
shell变量简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据.脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则. 在 Bash shell ...
- shell编程——变量的数值计算
在shell脚本中,有时候会需要对数值类型的变量进行计算,通常我们用的是(()) [root@localhost collect]# ((a=1+2)) [root@localhost collect ...
- 1.shell编程-变量的高级用法
1.1.变量替换 变量替换的六种形式 实例:非贪婪和贪婪的区别 从头部删除 [root@VM_0_9_centos shell_learn]# var_1="i love you,do yo ...
- Shell编程变量
shell变量 什么是变量,存放了各种数据,在linux怎么定义了变量,name=ken,name就是变量名,ken就是变量值, 但是在shell中,有三种方式: name=ken name='ken ...
随机推荐
- PHP中的traits简单理解
Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!不能被实例化.先来例子看下语法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...
- struts2的搭建和简单的例子(采用struts-2.5.2版本)
struts框架的概述: 当2001年初,Struts的第一个版本在apache网站上发布,它提供了一种分离视图和业务应用逻辑的web应用方案. 在Struts诞生之前,开发人员都是在jsp里写入处理 ...
- 华为交换机S5700设置远程ssh telnet登录
AAA是指:authentication(认证).authorization(授权).accounting(计费)的简称,是网络安全的一种管理机制:Authentication是本地认证/授权,aut ...
- 05_java之方法
01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. 02方法的定义格式 * A: 方法的格式 * 修饰符 返回值类型 方法名(参数类型 参 ...
- SpringBoot核心
1.基本配置 1.1入口类和@SrpingBootApplication SpringBoot通常有一个名为*Application的入口类,入口类里有一个main方法,这个main方法就是一个标准的 ...
- Redis实战——phpredis扩展安装
准备安装软件(download) 1> [redis] http://redis.googlecode.com/files/redis-2.4.3.tar.gz 2> [php ...
- ubuntu下使用sdk manager 安装sdk 其他版本
在终端运行SDK Manager 的脚本 sdk目录下的tools目录下的 android 脚本 就能打开sdk manager界面进行选择安装了.
- JS倒计时,自动提交表单!
<form id="frm" action="http://www.baidu.com"> 考试还剩余<div id="time&q ...
- ELK 日志管理系统,再次尝试记录
简介: 第二次尝试 ELK 记录... 工作流程: 1.客户端的 Logstash 将日志信息采集到之后传输给 Redis 做消息队列 2.然后服务端的 Logstash 将日志从 Redis 中取出 ...
- PHP - 脚本退出(包括异常退出),执行指定代码
之前做聊天室的时候有那么个需求就是当用户异常断线的时候就应该清除她的在线状态.因为当时对于flush不够了解,尝试了各种办法,好像都没办法在我们开发机上面执行相应的代码.后来知道是flush的原因.我 ...