《快乐的 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, 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, 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
|
打印这章暂时跳过吧,感觉用不上啊= =!
#!
字符序列是一种特殊的结构叫做shebang
,shebang
被用来告诉操作系统将执行此脚本所用的解释器的名字。
.
命令是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
foo=0 funct_1 () { local foo foo=1 echo "funct_1: foo = $foo" } funct_2 () { local foo 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