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

相关推荐

  • bash变量和逻辑运行

    bash 特性及bash脚本编程初步       终端,附着在终端的接口程序:      GUI:KDE,GNome,Xfce      CLI: /etc/shells              b…

    Linux干货 2016-12-23
  • crond实现邮件告警

    实验环境:centos 6.8 所需软件:mailx或msmtp或smtpEmail等 smtp客户端程序 所需帐号:我这使用的是163邮箱。 本方案优点:安装软件少,无须启动postfix等邮件服务。无须配置postfix邮件服务。由于调用的是注册邮箱,所以也不会给移入到垃圾邮件中。  建议:生产中,不管是什么服务发送邮件的建议使用外部smtp帐…

    Linux干货 2016-07-10
  • 103-corosync-pacemaker-crmsh

    一、概述: 1.1 什么是AIS和OpenAIS?

    2016-11-26
  • Linux网络相关概念及bash脚本编程练习

    马哥教育网络班第23期+第八周课堂练习 Linux网络相关概念及bash脚本编程练习 习题: 1.请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别 (1)网桥: 橋接器(英语:network bridge),又称网桥,一種網路裝置,負責網路橋接(network bridging)之用。 橋接器将网络的多个网段在数据链路层(O…

    Linux干货 2016-11-15
  • Grep 文本搜索工具与正则表达式

            grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Grep在实际中对于我们的工作有着很大的作用,用于对文件的搜索,通过由正则表达式字符以及…

    2017-04-15
  • CentOS多网卡单个ip和单个网卡多个ip的设置

    一、单个网卡设置一个IP地址     1.初始状态已添加一个网卡eth0,并设置的均为自动获取IP地址,如下图所示:网卡为eth0,ip地址为10.1.249.36;为了后续实验的顺利进行,我们把NetworkManager服务关闭     chkconfig NetworkMa…

    Linux干货 2016-09-06