代码改变世界

shell中的冒号“:”

2019-04-03 19:56  yanux  阅读(1897)  评论(0)    收藏  举报

case1:

{str:=expr}

    如果变量str不为空,${str:=expr}就等于str的值,若str为空,就把expr的值赋值给str。

case 2:

    在Linux系统中,冒号(:)常用来做路径的分隔符(PATH),数据字段的分隔符(/etc/passwd)等。其实,冒号(:)在Bash中也是一个内建命令,它啥也不做,是个空命令、只起到占一个位置的作用,但有时候确实需要它。当然,它也有它的用途的,否则没必要存在。在·Linux的帮助页中说它除了参数扩展和重定向之外不产生任何作用。

From Linux man : 

: [arguments]
    No effect; the command does nothing beyond expanding arguments and performing any specified redirections. A zero exit code is returned.

格式::

·啥也不做,只起到占位符的作用。比如在编写脚本的过程中,某些语法结构需要多个部分组成,但开始阶段并没有想好或完成相应的代码,这时就可以用:来做占位符,否则执行时就会报错。

例如:

  1. if [ "today" == "2011-08-29" ]; then  
  2.     :  
  3. else  
  4.     :  
  5. fi  
又如:

DATE="`date +%Y%m%d%H%M%S`" cp /boot/grub/grub.conf /boot/grub/grub.conf.bak.${DATE} if egrep '.*vmlinuz-2.6.32-220.23.1.lvs.el6.*nohz=off' /boot/grub/grub.conf ;then : else sed -i -r 's/(.*vmlinuz-2.6.32-220.23.1.lvs.el6.*)/\1 nohz=off/' /boot/grub/grub.conf fi

  if 里面的:,跟python里面的空语句pass作用类似 

       

格式:: your comment here

格式:# your comment here

写代码注释(单行注释)。

格式:: 'comment line1

comment line2

more comments'

写多行注释。

格式:: >file

格式:>file

清空文件file的内容。

格式:: ${VAR:=DEFAULT}

当变量VAR没有声明或者为NULL时,将VAR设置为默认值DEFAULT。如果不在前面加上:命令,那么就会把${VAR:=DEFAULT}本身当做一个命令来执行,报错是肯定的。

使用示例
示例一 参数扩展
[root@xman ~]# : abc=1234
[root@xman ~]# echo $abc

[root@xman ~]# : ${abc:=1234}
[root@xman ~]# echo $abc
1234

[root@xman ~]# ${abc:=1234}
-bash: 1234: command not found
[root@xman ~]#

示例二 清空文件
[root@xman ~]# cat <<<"Hello" >123.txt
[root@xman ~]# cat 123.txt
Hello
[root@xman ~]# : >123.txt
[root@xman ~]# cat 123.txt
[root@xman ~]#

示例三 脚本注释、占位符

#!/bin/sh  
  
: this is single line comment  
  
: 'this is a multiline comment,  
second line  
end of comments'  
  
if [ "1" == "1" ]; then  
        echo "yes"  
else  
        :  
fi  

 [root@xman ~]#./test_colon.sh 
yes