美文网首页Shell
Shell Script(三):变量、常量和捕获命令结果

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

作者: 蓝天白云bubble | 来源:发表于2018-12-15 11:53 被阅读33次

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

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

<html>
<head>
    <title>
    The title of your page
    </title>
</head>

<body>
    Your page content goes here.
</body>
</html>

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

#!/bin/bash

# sysinfo_page - A script to produce an html file

echo "<html>"
echo "<head>"
echo "  <title>"
echo "  The title of your page"
echo "  </title>"
echo "</head>"
echo ""
echo "<body>"
echo "  Your page content goes here."
echo "</body>"
echo "</html>"

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

#!/bin/bash

# sysinfo_page - A script to produce an HTML file

echo "<html>
 <head>
   <title>
   The title of your page
   </title>
 </head>
 
 <body>
   Your page content goes here.
 </body>
 </html>"

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

#!/bin/bash

# sysinfo_page - A script to produce an HTML file

cat << _EOF_
<html>
<head>
    <title>
    The title of your page
    </title>
</head>

<body>
    Your page content goes here.
</body>
</html>
_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_
    <html>
    <head>
        <title>
        $title
        </title>
    </head>

    <body>
    <h1>$title</h1>
    </body>
    </html>
_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(三):变量、常量和捕获命令结果

    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。 一、在本文最开始,先要阐述一下输出方面...

  • shell中变量的声明及使用

    一、shell中的变量声明 二、shell中命令运行结果赋值给某个变量

  • swift闭包中的值捕获

    闭包可以捕获和存储其所在上下文中任意常量和变量的引用。被称为包裹常量和变量。 Swift 会为你管理在捕获过程中涉...

  • 8.闭包

    闭包可以捕获和存储其所在上下文中任意常量和变量的引用。被称为包裹常量和变量。 Swift 会为你管理在捕获过程中涉...

  • Fu*king Closures

    闭包能在其被定义的上下文中捕获和存储任何常量和变量的引用,这叫关闭这些常量和变量。 全局函数是有名字且不捕获任何值...

  • Shell Script初入门

    Shell script学习总结 shell script注意事项 命令的执行顺序 从上至下,从左至右 命令的执行...

  • 5.shell脚本简介

    一、什么是shell script 简单的说,shell script就是一个普通的文本,写上多条shell命令,...

  • Shell特殊变量

    Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数 特殊变量列表 变量 含...

  • 闭包捕获值

    捕获值 一个闭包能够从上下文捕获已被定义的常量和变量。即使定义这些常量和变量的原作用域已经不存在,闭包仍能够在其函...

  • 第二课 shell脚本

    shell脚本:是一个很多shell命令组成的一个文件一:�常量数字常量 字符常量 字符串常量二:shell的入...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/ysmohqtx.html