下一页 上一页 目录

11. 表格

11.1 字符串比较运算符

(1) s1 = s2

(2) s1 != s2

(3) s1 < s2

(4) s1 > s2

(5) -n s1

(6) -z s1

(1) s1 匹配 s2

(2) s1 不匹配 s2

(3) __TO-DO__

(4) __TO-DO__

(5) s1 非空 (包含一个或多个字符)

(6) s1 为空

11.2 字符串比较示例

比较两个字符串。

        #!/bin/bash
        S1='string'
        S2='String'
        if [ $S1=$S2 ];
        then
                echo "S1('$S1') is not equal to S2('$S2')"
        fi
        if [ $S1=$S1 ];
        then
                echo "S1('$S1') is equal to S1('$S1')"
        fi
        

我在此引用 Andreas Beck 发送的邮件中的一段注释,其中提到了使用 if [ $1 = $2 ]

这不是一个好主意,因为如果 $S1 或 $S2 为空,您将收到解析错误。x$1=x$2 或 "$1"="$2" 更好。

11.3 算术运算符

+

-

*

/

% (求余数)

11.4 算术关系运算符

-lt (<)

-gt (>)

-le (<=)

-ge (>=)

-eq (==)

-ne (!=)

C 程序员应该简单地将运算符映射到其对应的括号。

11.5 实用命令

本节由 Kees 重写(请参阅致谢...)

这些命令中的一些几乎包含完整的编程语言。对于这些命令,只会解释基础知识。要获得更详细的描述,请仔细查看每个命令的 man 页面。

sed (流编辑器)

Sed 是一个非交互式编辑器。您不是通过在屏幕上移动光标来更改文件,而是使用编辑指令脚本发送给 sed,以及要编辑的文件名。您也可以将 sed 描述为过滤器。让我们看一些例子

        $sed 's/to_be_replaced/replaced/g' /tmp/dummy
        

Sed 将字符串 'to_be_replaced' 替换为字符串 'replaced',并从 /tmp/dummy 文件中读取。结果将发送到 stdout(通常是控制台),但您也可以在上面一行的末尾添加 '> capture',以便 sed 将输出发送到文件 'capture'。

        $sed 12, 18d /tmp/dummy
        

Sed 显示除第 12 行到第 18 行之外的所有行。原始文件不会被此命令更改。

awk (数据文件操作、文本检索和处理)

AWK 编程语言存在许多实现(最著名的解释器是 GNU 的 gawk 和 'new awk' mawk)。原理很简单:AWK 扫描模式,并且对于每个匹配的模式,将执行一个动作。

再次,我创建了一个包含以下行的虚拟文件

"test123

test

tteesstt"

        $awk '/test/ {print}' /tmp/dummy
        

test123

test

AWK 查找的模式是 'test',当它在文件 /tmp/dummy 中找到包含字符串 'test' 的行时,它执行的动作是 'print'。

        $awk '/test/ {i=i+1} END {print i}' /tmp/dummy
        

3

当您搜索多个模式时,您应该将引号之间的文本替换为 '-f file.awk',以便您可以将所有模式和动作放在 'file.awk' 中。

grep (打印匹配搜索模式的行)

在前面的章节中,我们已经看到了一些 grep 命令,它们显示与模式匹配的行。但 grep 可以做更多的事情。

        $grep "look for this" /var/log/messages -c
        

12

字符串 "look for this" 在文件 /var/log/messages 中找到了 12 次。

[好的,这个例子是假的,/var/log/messages 被修改过了 :-)]

wc (计数行数、字数和字节数)

在下面的示例中,我们看到输出不是我们期望的那样。本示例中使用的虚拟文件包含以下文本: "bash introduction howto test file"

        $wc --words --lines --bytes /tmp/dummy
        

2 5 34 /tmp/dummy

Wc 不关心参数顺序。Wc 始终以标准顺序打印它们,正如您所看到的:.

sort (排序文本文件中的行)

这次虚拟文件包含以下文本

"b

c

a"

        $sort /tmp/dummy
        

这就是输出的样子

a

b

c

命令不应该那么容易 :-) bc (计算器编程语言)

Bc 接受来自命令行的计算(来自文件的输入,而不是来自重定向器或管道),但也接受来自用户界面的计算。以下演示展示了一些命令。请注意

我使用 -q 参数启动 bc 以避免欢迎消息。

   $bc -q
        

1 == 5

0

0.05 == 0.05

1

5 != 5

0

2 ^ 8

256

sqrt(9)

3

while (i != 9) {

i = i + 1;

print i

}

123456789

quit

tput (初始化终端或查询 terminfo 数据库)

tput 功能的小演示

        $tput cup 10 4
        

提示符出现在 (y10,x4)。

        $tput reset
        

清除屏幕,提示符出现在 (y1,x1)。请注意 (y0,x0) 是左上角。

        $tput cols
        
80

显示 x 方向上可能的字符数。

强烈建议熟悉这些程序(至少)。有大量的小程序可以让您在命令行上实现真正的魔力。

[一些示例取自 man 页面或 FAQ]


下一页 上一页 目录