Linux 变量操作记录

变量操作总结:

${Var:-Value}        变量Var 为unset 或 null  则输出Value。 有值则输出变量Var的值。

${Var:=Value}        变量Var 为unset 或 null  则输出Value,并且赋值于变量Var。 同上。

${Var:+Value}        变量Var 为unset 或 null  则输出变量Var。 有值则输出Value.

${Var:?Value}        变量Var 为unset 或 null  则输出错误信息Value。有值则输出变量Var的值。

${Var-Value}        变量Var 为 unset 则输出Value。 有值或为空,则输出变量Var的值。

${Var=Value}        变量Var 为 unset 则输出Value,并且赋值于变量Var。        同上。

${Var+Value}        变量Var 为 unset 则输出变量Var。有值或为空,则输出Value

${Var?Value}        变量Var 为 unset 则输出错误信息Value。 有值或为空, 则输出变量Var。

在这种的操作中,只有三种情况:1. 变量有值, 2. 变量没有值,  3. 没有变量

在上面加:的操作符中, 空不代表值,    在下面没有:号的操作符中,空也代表为值。



${变量}      一般变量引用。  {} 一般情况可省略。

${#变量}     取变量中字符的个数(长度)。




一、 变量值的编辑:

1. 变量字符匹配则不输出。   2. 变量内容字符偏移并截出余下的部分字符。

3. 变量字符的替换。

  1.  所匹配到的变量内容将不显示。

操作符:#                  ${变量#匹配字符}

$ do="Hello World"

$ echo $do

Hello World

$ echo ${do#He}

llo World                    #He没有显示

$ echo ${do#*l}

lo World                     #从左到右匹配

#号在上面那种变量应用中,把左边变量的值,按右边的字符串从左到右最短区配

所区配到的字符不输出。 支持通配符。

操作符: ##

$ echo ${do##*l}
d                        #变量的值是Hello World, 从左边一直匹配到倒数第二个字符l.

##号,这个则就是最长区配了。   记住是从左到右的区配顺序。

操作符:%              ${变量%匹配字符}

$ echo $do

Hello World

$ echo ${do%ld}

Hello Wor

$ echo ${do%o*}

Hello W

%号跟上面#号的形式都一样,只不过是从右到左的匹配。 同样的一个%号是 最短区配


  操作符:%%

$ echo ${do%%o*}

Hell

  %%号,两个%号,最长区配 。  通配符都是支持的。 毕竟都是在shell下,经由shell解释输出。



 2.  上面的 # % 都是用来定义匹配变量内容的操作。而下面是用来定义固定的字符的操作。

${变量:数字}

$ echo $do

Hello World

$ echo ${do:3}

lo World                    #变量内容的前三个字符没有显示。

前面的3个字符没有输出, 专业点叫作 偏移 , 向右偏移了3个字符。

$ echo ${do:3:2}

lo

$ echo ${do:3:5}

lo Wo

在上面偏移的基础上,再显示向后截取的几位字符。 空格可也是字符啊。



3.  替换变量内容。

${变量/匹配字符/替换字符}

$ echo ${do/l/L}
HeLlo World

把第一个匹配到的字符,也就是l , 替换成大写L .

这里是只替换了第一个匹配到的字符。如果把变量后面的/变成两个,就变成替换所有了。

${变量//匹配字符/替换字符}

$ echo ${do//l/L}
HeLLo WorLd

替换了所有的l,这里也是可以用通配符的, 但是这里没有最长最短匹配之说,只有替换1个还是替换所有的字符。至于效果,亲们可以自己试试。



二、 变量....., 不知道叫什么名了。

在这种的操作中,只有三种情况:1. 变量有值, 2. 变量没有值,  3. 没有变量



注意: 一般情况下,变量为空也是一种值。 除非有特殊的操作。

do=              do变量有值了。

declare  var     生成了var变量,但var变量没有值。

1.  ${变量-值}

里面的是减号。  那个值当然也可以用变量,不过要加上$,相当于变量引用。-号的左边和右边完全是不同的两个部分。

$ echo $do
Hello World

$ echo ${do-kaka}              #在do有值的情况下,输出do的值。

Hello World                            

$ unset do                     #删除变量do

$ echo ${do-kaka}              #在没有do变量的情况下,也就是没有值。则输出后面的值。

kaka

$ do=                          #在do为空的情况下。

$ echo ${do-kaka}              #在do有值的情况下,输出do的值,do是空值。
                
                               #所以输出空。

这个的别一种方式一般在判断默认值的时候用。如: do=${do:-kaka}

2.  ${变量=值}   里面是等号。

$ echo $do
Hello World

$ echo ${do=kaka}                #在do有值的情况下,输出do的值。

Hello World                            

$ unset do

$ echo ${do=kaka}                #在没有do变量的情况下,或没有值。输出后面的值

kaka                                   

$ echo $do

kaka                             #并且把kaka赋给变量do。

比 - 多了一项功能,只要在变量,就会把kaka赋给do。

3.  ${变量+值}   里面是加号。

$ echo $do
Hello World

$ echo ${do+kaka}              #do有值的情况下,输出kaka

kaka

$ unset do

$ echo ${do+kaka}              #在没有do这个变量的情况下或者没有值。那就没有吧。                                        

$ do=

$ echo ${do+kaka}              #空值,输出kaka

kaka

看样子正好与 - 相反, 这个是变量有值则用后面的值,而 - 号是没值则用后面的值。

4.  ${变量?值} 

$ echo $do
Hello World

$ echo ${do?kaka}

Hello World

$ unset do

$ echo ${do?kaka}              # 看到了没,在没有do这个变量的情况下或者没有值。
                               # 提示错误信息是 kaka
bash: do: kaka

$ do=

$ echo ${do?kaka}

除了没有值的情况下会报错,并且报错信息是kaka外,就没有别的了。



    下面还是关于 - = + ? 的,不过变成了 :-  :=  :+  :?   。

    不一样之处就是把空值给抹去了,从此以后空就真的空了, 空不再代表值而存在, 

    而是跟unset一样。



这里说明一下, 以shell来说。其实unset就是把变量的内存空间的地址给撤销了,

而变量空值,就是有变量的内存空间地址,不过内存空间里面没有数据。




1.  ${变量:-值} 

$ echo $do
Hello World

$ echo ${do:-kaka}

Hello World

$ unset do

$ echo ${do:-kaka}               #没有do变量,同样的相当于没有值。 输出kaka

kaka

$ do=

$ echo ${do:-kaka}                #空不再代表值, 在do没有值的情况下
                                  #输出kaka
kaka

怎么样,区别只有一点, 空不再代表值了。

 2. ${变量:=值}

$ echo $do
Hello World
$ echo ${do:=kaka}
Hello World
$ echo $do
Hello World
$ unset do
$ echo ${do:=kaka}
kaka
$ echo $do
kaka
$ do=
$ echo ${do:=kaka}                  #空不再代表值,所以输出kaka
kaka
$ echo $do
kaka

还是那个意思,kaka输出,并且赋值给了do。    空不再代表值了。

3. ${变量:+值}   

$ echo $do
Hello World

$ echo ${do:+kaka}                #在do有值的情况下,输出kaka

kaka

$ unset do

$ echo ${do:+kaka}                #在do不存在的时候,也就是没有值。 输出do的值,
                                  #而do的值当然是不存在的,输出空白行。
$ do=

$ echo ${do:+kaka}                #do为空,空不再代表值。 没有值就不会输出后面的值。
                                  #同样的空白行。

+ 号是有值才会用后面的那个值的。 跟-号正好相反。

4. ${变量:?值} 

$ echo $do
Hello World

$ echo ${do:?kaka}

Hello World

$ unset do

$ echo ${do:?kaka}                   #没有do变量,当然没有值,报kaka错误。

bash: do: kaka

$ do=

$ echo ${do:?kaka}                   #do为空,代表没有值。 报kaka错误。

bash: do: kaka

这个跟-号也差不多了, 只不过还里是输出的错误信息。




good boy, nice girl.



本文出自 “On Foot” 博客,请务必保留此出处http://fanqie.blog.51cto.com/9382669/1649669

时间: 2024-10-04 07:52:36

Linux 变量操作记录的相关文章

Linux 变量操作

一. 首先算是变量的编辑吧: 1. 变量字符匹配删除输出.   2. 变量字符固定偏移并截出字符. 3. 变量字符的替换. 1.  举一个例子先: 关于#号的.  ${变量#匹配字符} $ do="Hello World" $ echo $do Hello World $ echo ${do#He} llo World $ echo ${do#*l} lo World #号在上面那种变量应用中,把左边变量的值,按右边的字符串从左到右最短区配, 所区配到的字符删除输出. 支持通配符. $

linux 命令操作记录

1.查找名为 migrations 的文件夹/文件,并删除 find . -name "migrations" -type d #查找当前目录下文件夹名为 migrations 的所有文件夹find . -name "migrations" -type d | xargs rm -rf #查找并删除 find . -name "views.py" #查找当前目录下文件名为 views.py的所有文件find . -name "views

Linux下修改系统编码的操作记录

Linux系统安装后,发现中文显示乱码.因为系统编码为en_US.UTF-8,应改为支持中文的编码(即zh_CN.UTF-8)操作记录如下:1)检查linux的系统编码检查linux的系统编码,确定系统是否支持中文.在linux系统的终端中输入命令:locale,就会看到打印出的系统编码信息.[[email protected] ~]# localeLANG=en_US.UTF-8                        LC_CTYPE="en_US.UTF-8"LC_NUME

Linux下磁盘分区、挂载、卸载操作记录

Linux下磁盘分区.挂载.卸载操作记录. 操作环境:CentOS release 6.5 (Final) Last login: Wed Oct 26 17:25:27 2016 from 118.230.194.76 [[email protected] ~]# [[email protected] ~]# fdisk -l Disk /dev/sda: 536.9 GB, 536870912000 bytes 255 heads, 63 sectors/track, 65270 cylin

linux下监控用户的操作记录

想知道用户登陆系统后都操作了什么,怎么办? 别急,linux下有一个script工具,专门记录终端会话中所有输入输出结果,并存放到指定文件中. 先看看怎么录制吧! 1.创建日志存放目录 # mkdir /opt/operation_log # chmod 777 -R /opt/operation_log 2.设置用户登陆后自动录制 # vi /etc/profile   #末尾追加一下内容 if [ $UID -ge 500 ]; then    exec script -t 2>/opt/o

linux下监控用户操作记录的工具

linux下监控用户操作记录的工具: apt-get install bsdutils mkdir /opt/operation_log chmod 777 -R /opt/operation_log vi /etc/profile exec script -t 2> /opt/operation_log/$USER-$UID-date +%F-%T.data -a -q -f /opt/operation_log/$USER-$UID-date +%F-%T.log :wq source /e

Linux下IP SAN共享存储操作记录

一.简单介绍SAN,即存储区域网络(storage area network and SAN protocols),它是一种高速网络实现计算机与存储系统之间的数据传输.常见的分类是FC-SAN和IP-SAN两种.FC-SAN通过光纤通道协议转发scsi协议:IP-SAN通过TCP协议转发scsi协议,也就是IP 地址.存储设备是指一台或多台用以存储计算机数据的磁盘设备,通常指磁盘阵列,主要厂商EMC.日立等. iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用

Linux 系统添加操作记录--命令审计功能

**Linux 系统添加操作记录审计 1.mkdir -p /usr/local/domob/records/ chmod 777 /usr/local/domob/records/ chmod +t /usr/local/domob/records/ 2.vi /etc/profile 在最后添加下面的代码 if [ ! -d /usr/local/domob/records/${LOGNAME} ] then mkdir -p /usr/local/domob/records/${LOGNA

记录linux系统用户shell终端操作记录

在 /etc/profile 最后添加 export HISTTIMEFORMAT='[%F %T]: ' export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });logger -t audit "[euid=$(whoami)]":$(who am i):[$(pwd)]:"$msg";}' alias crontab-l='cat /var/spool/cron/tabs/root /