#《快乐的 Linux 命令行》

#fold

fold将文本的行限制到特定的宽,如果没有字符设置,默认是80

1
2
3
4
5
$ echo "The quick brown fox jumped over the lazy dog." | fold -w 12
The quick br
own fox jump
ed over the
lazy dog.

增加的-s选项将让fold分解到最后可用的空白字符,即会考虑单词边界:

1
2
3
4
5
6
$ echo "The quick brown fox jumped over the lazy dog." | fold -w 12 -s
The quick
brown fox
jumped over
the lazy
dog.

#fmt

-w指定行宽,-p可以指定特定的行:

1
2
3
4
5
6
7
8
9
10
$ vi fmt-code.txt
# This file contains code with comments.

# This line is a comment.
# Followed by another comment line.
# And another.

This, on the other hand, is a line of code.
And another line of code.
And another.
1
2
3
4
5
6
7
8
9
$ fmt -w 50 -p '# ' fmt-code.txt
# This file contains code with comments.

# This line is a comment. Followed by another
# comment line. And another.

This, on the other hand, is a line of code.
And another line of code.
And another.

#pr

pr程序用来把文本分页。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
$ pr -l 15 -w 65 distros.txt


2021-04-12 15:14 distros.txt Page 1


SUSE 10.2 12/07/2006
Fedora 10 11/25/2008
SUSE 11.0 06/18/2008
Ubuntu 8.04 04/24/2008
Fedora 8 11/08/2007







2021-04-12 15:14 distros.txt Page 2


SUSE 10.3 10/04/2007
Ubuntu 6.10 10/26/2006
Fedora 7 05/31/2007
Ubuntu 7.10 10/18/2007
Ubuntu 7.04 04/19/2007







2021-04-12 15:14 distros.txt Page 3


SUSE 10.1 05/11/2006
Fedora 6 10/24/2006
Fedora 9 05/13/2008
Ubuntu 6.06 06/01/2006
Ubuntu 8.10 10/30/2008







2021-04-12 15:14 distros.txt Page 4


Fedora 5 03/20/2006

#printf

printf主要用在脚本中,用于格式化表格数据,而不是直接用于命令行。

1
2
$ printf "I formatted the string: %s\n" foo
I formatted the string: foo

打印这章暂时跳过吧,感觉用不上啊= =!

#!字符序列是一种特殊的结构叫做shebangshebang被用来告诉操作系统将执行此脚本所用的解释器的名字。

.命令是source命令的同义词,一个shell内建命令,用来读取一个指定的shell命令文件,并把它看作是从键盘中输入的一样。

一个带引号的字符串可能包含换行符,因此可以包含多个文本行,shell会持续读取文本直到它遇到右引号。

shell碰到一个变量的时候,会自动地创建它。

变量名可由字母数字字符(字母和数字)和下划线字符组成。变量名的第一个字符必须是一个字母一个下划线。变量名中不允许出现空格和标点符号。

shell不会在乎变量值的类型,它把它们都看作是字符串。

在赋值过程中,变量名、等号和变量值之间必须没有空格。

shell函数有两种语法形式:

1
2
3
4
function name {
commands
return
}

1
2
3
4
name () {
commands
return
}

为了使函数调用被识别出是shell函数,而不是被解释为外部程序的名字,在脚本中shell函数定义必须出现在函数调用之前。

shell函数的命名规则和变量一样,一个函数必须至少包含一条命令。

通过在变量名之前加上单词local,来定义局部变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ vi test_local.sh
#!/bin/bash
# local-vars: script to demonstrate local variables
foo=0 # global variable foo
funct_1 () {
local foo # variable foo local to funct_1
foo=1
echo "funct_1: foo = $foo"
}
funct_2 () {
local foo # variable foo local to funct_2
foo=2
echo "funct_2: foo = $foo"
}
echo "global: foo = $foo"
funct_1
echo "global: foo = $foo"
funct_2
echo "global: foo = $foo"
1
2
3
4
5
6
7
$ chmod +x test_local.sh
$ ./test_local.sh
global: foo = 0
funct_1: foo = 1
global: foo = 0
funct_2: foo = 2
global: foo = 0

379/505