shell的变量功能

                                                       shell的变量功能

一、什么是变量

     变量是bash环境中非常重要的一个内容,那什么是变量呢?简单说就是让一某一个特定字符串来代表另一个比较复杂或者是容易变动的数据。

二、变量的显示与设置:echo ,unset

1变量的显示echo $变量   echo  ${变量}

 shell的变量功能

2.1变量的设置设置或者是修改某个变量的内容):用等号(=连接

变量与它的内容。

如:

shell的变量功能 

2.2变量的设置规则

1)变量与变量内容以一个等号“=”连接,如:

“myname=Vbird”

2)等号两边不能直接接空格符,错误示范如:

““myname=   Vbird”“myname=Vbird   Tsai”

3)变量名称只能是英文字母与数字,但开头字符不能是数字,错误示范如:

“2myname=Vbird”

变量命名规则如下:

a.不能使程序中的保留字:例如if, for

b.只能使用数字、字母及下划线,且不能以数字开头

c.见名知义

d.统一命名规则:驼峰命名法

4)变量内容若有空格符可使用双引号” ” “或者单引号” ‘ “将变量内容结合起来:

a.双引号内的特殊字符如$等,可以保持原本的特性,如:

shell的变量功能 

b.单引号内的特殊字符则仅为一般字符(纯文本),如:

shell的变量功能 

5)可用转义字符“\”将特殊符号(如$\!)变成一般字符。

6、在一串命令中,还需要通过其他的命令提供的信息,可以使用反单引号“`命令`”或者“$(命令)”,如:

shell的变量功能 

7、若该变量为了增加变量内容时,则可用“$变量名称${变量}累加内容,如:

shell的变量功能 

8、若该变量需要在其他子进程(子进程:在目前这个shell的情况下,去打开另一个新的shell,新的shell就是子进程)执行,则需要以export来使变量变成环境变量:

如:

shell的变量功能 

 

9.通常大写字符为系统默认变量,自行设置变量可以使用小写字符。

10.取消变量的方法为使用“unset变量名称,如:

shell的变量功能 

三、bash中变量的种类

1、环境变量:生效范围为当前shell进程及其子进程

变量声明、赋值:

                export name=VALUE

                declare -x name=VALUE

变量引用:$name, ${name}

删除变量:unset name

显示所有环境变量(环境变量的查询)

env

printenv

export

declare -x

#env  列出环境下所有环境变量与其内容

#set 可查看所有的变量(含环境变量与自定义变量)

bash内建的环境变量:PATH   SHELL   USER   UID   HOME   PWD Ü

SHLVL    LANG     MAIL     HOSTNAME   HISTSIZE    —

2、本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,    包括当前shell的子shell进程均无效

变量赋值:name=‘value’ v

 可以使用引用value:

(1) 可以是直接字串; name=“root”

 (2) 变量引用:name=”$USER”

(3) 命令引用:name=`COMMAND` name=$(COMMAND) v

 变量引用${name} $name “”

           :弱引用,其中的变量引用会被替换为变量值

           :强引用,其中的变量引用不会被替换为变量值,而保持原字符串 v

 显示已定义的所有变量:set v

 删除变量:unset name

3、局部变量:生效范围为当前shell进程中某代码片断(通常指函数)

4、位置变量:$1, $2, …来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数。

 $1, $2, …:对应第1、第2等参数,shift [n]换位置

$0: 命令本身

$*: 传递给脚本的所有参数,全部参数合为一个字符串

$@: 传递给脚本的所有参数,每个参数为独立字符串

$#: 传递给脚本的参数的个数

$@ $* 只在被双引号包起来的时候才会有差异

set — 清空所有位置变量

5、特殊变量:$?, $0, $*, $@, $#,$$

1$?  变量保存最近的命令退出状态

2)echo $$:查询当前进程号

       显示所有进程  ps -ef | grep bash   tty找到当前的终端 ,查询当前进程号

       查看进程树(-p 显示进程号)pstree -p | grep bash ,查询当前进程号 

3)echo $PPID:查询父进程进程号

4)echo $SHLVL:查询是当前SHELL是几级SHELL

6、只读变量:能声明,但不能修改和删除

声明只读变量:

                           readonly name

                            declare -r name

查看只读变量:

                             readonly –p

四、变量内容的删除、替代与替换

1、变量内容的删除与替换

变量是某个值的名称,引用变量值就称为变量替换,$符号是变量替换符号。

变量替换的两种格式:

     1.   $variable

     2.   ${variable}

例子1.

shell的变量功能 

命令替换是指将命令的标准输出作为值赋给某个变量。一种是使用反引号,另一种是利用$(),并且$(可以嵌套使用)

反引号和$()在处理双斜线\\时是有区别的,反引号将反双斜线处理为空格,$()将反双斜线处理为单斜线。

五、退出状态和退出状态码

进程使用退出状态来报告成功或失败

• 0 代表成功,1255代表失败

• $? 变量保存最近的命令退出状态

v 例如:

ping -c1 -W1 hostdown &> /dev/null

echo $

bash自定义退出状态码:

exit [n]:自定义退出状态码

注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出

状态取决于exit命令后面的数字

注意:如果未给脚本指定退出状态码,整个脚本的退出状态码

取决于脚本中执行的最后一条命令的状态码。

六、bash中的算术运算:help let

+, -, *, /, %取模(取余), **(乘方)在bc当中乘方是^

实现算术运算:

(1) let var=算术表达式

(2) var=$[算术表达式]

(3) var=$((算术表达式))

(4) var=$(expr arg1 arg2 arg3 …)   乘法时要转译* ,即\*

(5) declare –i var = 数值

(6) echo ‘算术表达式’ | bc

乘法符号有些场景中需要转义,如*

增强型赋值:

                +=,-=, *=, /=, %=

let varOPERvalue

               例如:let count+=3

                       自加3后自赋值

自增,自减:

                 let var+=1

                 let var++

                 let var

                  -=1

                 let var–

 

原创文章,作者:Light Yagami,如若转载,请注明出处:http://www.178linux.com/83904

(0)
Light YagamiLight Yagami
上一篇 2017-08-05
下一篇 2017-08-05

相关推荐

  • 自动编译安装Apache脚本

    自动编译安装Apache脚本,Linux系统版本不同,具体信息要查看日志进行对应的处理,本脚本安装Apache2.4.9

    Linux干货 2018-03-17
  • 第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可 who |cut -d ' ' -f1 |sort|uniq 2、取出最后登录到当前系统的用户的相关信息 last|head -1 3、取出当前系统上被用户当作其默认shell的最…

    Linux干货 2016-12-26
  • ansible进阶(roles应用)

    ansible 进阶 一、roles简介 一个项目从开始到结束,不是简单几十个playbook就可以完事了,当文件数很多,有上百个的话,仅通过简单的includes不停的引用,那最终的结果错综复杂。这个时候ansible roles就可以很好的发挥它的作用了。 roles,字面意思是角色的含义,可以理解为有相互关联功能的集合。我们把安装ntp、mem、ngi…

    2017-01-05
  • 马哥教育网络班22期+第2周课程练习

    1、Linux上文件/目录相关命令有哪些? 1)目录管理类命令:mkdir、rmdir (1)mkdir:make directorise 创建文件夹  使用格式:      mkdir [OPTION]… DIRECTORY…    &nb…

    Linux干货 2016-09-08
  • Linux Basics-重定向与管道:第一部分

    Linux Basics-重定向与管道:第一部分 概述 本教程将介绍 Linux 中重定向标准 IO 流的基本技术。学习: 什么是重定向与标准 IO 流:标准输入、标准输出和标准错误 各种流和管道的实际应用   前提条件 你应该了解 Linux 基本知识以及拥有一个正常工作的 Linux 系统,在本文说明的实例中,我采用是CentOS 7 内核版本…

    Linux干货 2016-10-29
  • 关于VIM编辑器

                                                      &nbsp…

    系统运维 2016-08-11