-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbash-shell-tutorial-first-script.t2t
More file actions
134 lines (101 loc) · 5.29 KB
/
bash-shell-tutorial-first-script.t2t
File metadata and controls
134 lines (101 loc) · 5.29 KB
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
WIKINAME
Cai Yuanqing
ckjacket@gmail.com
%%!encoding: utf-8
%!includeconf: config.t2t
%%% Some post processing filter magic (search & replace)
% Adds an ID to the <body> tag
% Note: the (?i) makes the pattern case insensitive (avoids headaches)
%!postproc: '(?i)(<body)' '\1 id="home"'
% Adds the RSS feed header to the page, right after <head> tag
%!postproc: '(?i)(<head>)' \1\n<link rel="alternate" href="http://txt2tags.wordpress.com" type="application/rss+xml">
% Adds class name to the splash image
%!postproc: '(download-v\d+.png")' '\1 class="splashimg"'
% Fills the "PHP" tooltip on "About this site". See config.t2t for details.
%!postproc: {tooltip1} One exception: Txt2tags Online is a PHP file, because it needs to be interactive.
% meta: keywords
%!postproc: (</HEAD>) <meta name="keywords" content="txt2tags, convert, conversion, online, text, HTML, XHTML, SGML, LaTeX, Lout, Man page, Wikipedia, Google Code Wiki, DokuWiki, MoinMoin, MagicPoint, PageMaker, Python, free, tool, markup, Linux, Mac, Windows, GPL">\n\1
% meta: description
%!postproc: (</HEAD>) <meta name="description" content="txt2tags - Convert plain text to HTML, XHTML, SGML, LaTeX, DocBook, Lout, Man page, Creole, Wikipedia, Google Code Wiki, DokuWiki, PmWiki, MoinMoin, MagicPoint, PageMaker, AsciiDoc and ASCII Art!">\n\1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% All the config is made, so the real contents begins now
% The sidebar with the menu links are on a separated file, included now
= 3. 第一个脚本 =
作为我们的第一个脚本,我们仅仅让它能够打印"Hello World"。接着我将在Hello World之外带给你在其他教程中从未有过的体验。
创建first.sh如下:
========================================================
__first.sh__
```
#!/bin/sh
# This is a comment!
echo Hello World # This is also a comment!
```
========================================================
第一行表示这个文件将被/bin/sh所执行。这是几乎每个Unix系统上标准的Bash所在位置。如果你使用的是GNU Linux发行版,/bin/sh则是Bash的一个符号链接。
第二行由特殊字符#开始。它标记此行为注释行,可以整个被shell乎略。
一个例外是在shell最开始的时候,我们总是由"#!"开始。Unix会特殊对待这一行。即使你使用的csh,ksh或者其他任何交互式shell,那一行都需要被Bourne Shell解析。
相似的,一个Perl脚本可能由"#/usr/bin/perl"开始,这表示要告诉shell这个脚本需要用perl来执行。对于Bourne Shell编程来说,我们可以一直使用"#!/bin/sh"。
第三行运行了一个命令:echo,带两个参数 - 一个是"Hello";另一个是"World"。
需要注意的是echo会自动的在两个参数之间加入一个空格。
"#"仍然是表示后面是一行注释,它后面的任何内容都将被乎略。
现在我们给脚本增加运行权限来使得它可以被执行,然后运行./first.sh.
你可以在屏幕上看到如下信息:
```
$ chmod +x first.sh
$ ./first.sh
Hello World
```
你也可以直接执行以下命令来达到同样的目的:
```
$ echo Hello World
Hello World
```
现在让我们做一点小改动。
首先,我们注意到echo会在参数之间自动加入一个空格。那么如果我们在"Hello"和"World"之间加入许多个空格,会输出什么呢?加入TAB呢?
在学习Shell编程时,一定要自己尝试看看哦:-D
```
$ echo Hello World
Hello World
$ echo Hello World
Hello World
$ echo Hello World
Hello World
```
很奇怪吗!结果都是一样的! 我们调用echo并带着两个参数,它一点也不像cp会在意参数之间有多少空缺。
现在再对我们的代码做点修改:
```
#!/bin/sh
#This is my first script
echo "Hello World" #This is still a comment
```
并且运行它:
```
$ ./first.sh
Hello World
```
这次起作用了。如果你有其他方面的编程经验,也许你也早就预料到应该会是这个结果。但是理解更加复杂的脚本或者命令时,我们必须能解释:
为什么会这样?
事实上echo在echo "Hello World"时仅仅有一个参数 - 字符串"Hello World"。它会很准确的将这个字符串打印出来。
理解这个过程的重点在于:
shell会先解析传入的参数,然后在将参数传入执行的程序中。在我们的例子中,首先是"Hello World"被完整的解析成一个字符串,然后再将这个字符串作为一个参数传给echo,所以echo会完整的打印出这个参数。
最后一个例子,输入以下脚本,试试先猜猜它们的输出,然后运行。
========================================================
__first2.sh__
```
#!/bin/sh
#This is my first script
echo "Hello World"
echo "Hello World"
echo "Hello * World"
echo Hello * World
echo Hello World
echo "Hello" World
echo Hello " " World
echo "Hello \"*\" World"
echo `Hello` World
echo 'Helo' World
```
========================================================
是否每条语句的输出都和你想像的一样呢?如果不是也不要担心哦!这正是我们的教程后面会介绍到的知识,在后面的章节,我们会学习到比echo更给力的命令,但是一定要记得亲手实践和练习。
% The footer is an external file
%!include: footer.t2t