Shell Script(三):变量、常量和捕获命令结果

著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

       一、在本文最开始,先要阐述一下输出方面的内容。例如想要输出如下形式的 HTML 字符串:



    
    The title of your page
    



    Your page content goes here.


       可以使用每行用一个 echo 命令的方式,如下:

#!/bin/bash

# sysinfo_page - A script to produce an html file

echo ""
echo ""
echo "  "
echo "  The title of your page"
echo "  "
echo ""
echo ""
echo ""
echo "  Your page content goes here."
echo ""
echo ""

       很明显,这种方式需要重复多次使用 echo 命令,比较繁琐。因此我们可以改用如下稍微简洁一些的方式,如下:

#!/bin/bash

# sysinfo_page - A script to produce an HTML file

echo "
 
   
   The title of your page
   
 
 
 
   Your page content goes here.
 
 "

       即用一个引号将字符串的所有内容括起来。然而这样存在一个问题:当字符串中包含需要转义的字符时需要在该字符前面加反斜杠,这样还是有些麻烦。除此之外,还有一种方法可以使输入更加方便,方式如下:

#!/bin/bash

# sysinfo_page - A script to produce an HTML file

cat << _EOF_


    
    The title of your page
    



    Your page content goes here.


_EOF_

       上面的写法可以总结成下面的形式:

command << token
content to be used as command's standard input
token

       其中,"token" 可以是随意的一个字符串,但注意不要与系统冲突。如上面的例子中 "token" 使用的是 _EOF_ ,如果将 _EOF_ 替换为 good 仍然能够得到同样的结果。
       最后再说一下缩进的问题。如果将上面的输入方式写成下面的形式(注意 "<<" 改成了 "<<-" ):

command <<- token
content to be used as command's standard input
token

这时,字符串每行行首的 TAB 在实际输出时都会被忽略,但注意空格不会被忽略。

       二、变量
       1、Shell 中变量的命名规则:
       (1)必须以字符开头;
       (2)不能包含空格,如果想要包含空格,习惯上空格使用下划线代替;
       (3)不能包含标点符号。
       2、变量的定义和使用
       先看一个例子:

#!/bin/bash

# sysinfo_page - A script to produce an HTML file

title="My System Information"

cat <<- _EOF_
    
    
        
        $title
        
    

    
    

$title

_EOF_

       对于稍微有点编程基础的人都能从这个例子中知道 Shell 变量的定义和使用方法。但需要注意以下几点:
       (1)定义变量时 "=" 两边不能有空格。
       (2)变量的值都是字符串类型的,因此不能直接通过 "+","-","*","/","%" 来参与算数运算(Shell 变量参与算术运算的方法这里先不涉及,即便不使用变量的算术运算,也能解决开发工作中几乎所有项目的部署工作)。
       (3)定义只读变量时只需要在变量名前面加 "readonly" 即可,如:
       readonly title="My System Information"
       只读变量不能被再次赋值,如果强行赋值系统将会报错。
       (4)在调用变量时可以使用 $变量名 或者 ${变量名} 的方式,后者是为了帮助解释器明确变量名的边界,比如假设有一个 greeting 变量:
       ${greeting}bubble 能够被解释器正确解释,但如果写成 $greetingbubble 则会报错。
       (5)Linux 系统有很多预定义的变量,如 HOME、HOSTNAME等等。在自定义变量时注意不要与系统变量冲突。

       三、常量
       在 Shell 中,常量有其自己的定义方式。但在实际使用时总是习惯用全大写的变量名来声明这是一个常量,这个全大写的变量名提示在后续的编码中不要改变它的值。虽然我们依然可以改变变量名全大写的变量值,但按照惯例,我们不要去修改它的值。此外,系统变量也可以看作是常量。

       四、捕获命令结果
       对于这个知识点,可以举例说明:

right_now=$(date +"%x %r %Z")
time_stamp="Updated on $right_now by $USER"

       我们可以使用

variable_name=$(command)

       或

variable_name=`command`

的方式来捕获一个命令的返回结果,并将该结果赋值给一个变量。在 bash 脚本中更推荐使用第二种方式,因为它更具有通用性。

相关文档

http://linuxcommand.org/lc3_wss0030.php

上一篇:Shell Script(二):别名和函数
下一篇:Shell Script(四):条件分支语句 1

你可能感兴趣的:(Shell Script(三):变量、常量和捕获命令结果)