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)
上一篇 2017-08-05 17:13
下一篇 2017-08-05 17:44

相关推荐

  • N25期第五周作业

    1.显示当前系统上root、fedora或user1用户的默认shell grep -E ‘^(root|ftp|sync)’ /etc/passwd|cut -d: -f7 2.找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello() grep ‘\b.*\b()’ /etc/rc.d/init.d/f…

    Linux干货 2016-12-26
  • 用户和组管理类命令

    用户和组管理类命令 useradd useradd命令用于Linux中创建的新的系统用户 语法 useradd(选项)(参数) 选项 -c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中; -d<登入目录>:指定用户登入时的启始目录; -D:变更预设值; -e<有效期限>:指定帐号的有效期限; -f<…

    Linux干货 2018-03-18
  • 8.5文本处理工具

    取本机ip地址 利用head命令取行首两行,tail命令取行尾一行, ifconfig |head -2 |tail -1   利用tr -s命令替换空格为“:”,并合并重复的“:”。利用cut -d:-f3命令,保留以“:”为分割符的第三部分   ifconfig |head -2 |tail -1 |tr -s "…

    Linux干货 2016-08-08
  • 用户组和权限

    用户、组和权限   资源分派       Authentication   认证       Authorization    授权    &nbsp…

    Linux干货 2016-08-04
  • haproxy实验

    实验1: 部署discuz 1、  不做会话绑定 基于roundrobin —————————10.1.72.40|30————————&#821…

    Linux干货 2016-12-05
  • centos系统启动流程详解

    centos系统启动流程详解 CentOS启动流程: POST 加电自检 主板上有一个ROM芯片,有只读程序,CPU被设计为一旦通电就会自动去找ROM芯片上的程序并运行,即检查各种硬件设备是否存在。 BootSequence 引导过程 加电自检后按BIOS中设定的次序查找各引导设备,第一个有引导程序的设备即是本次启动用到的设备 MBR(BootLoader)…

    Linux干货 2017-09-04