分享
 
 
 

BASHSHELL程式设计简介

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

BASH SHELL 程序设计简介:1.2版

如同在 Linux 中其他的 shell,Bourne Again SHell 不只是一个优秀的指令行式的 shell,同时也提供 scripting 语言。Shell scripting 允许你完全利用 shell 的功能,将需要许多指令执行的多项工作自动化。在你的 Linux 机器上有许多程序是 shell 程序。如果你对学习他们如何运作,或修改他们感兴趣,基本要素是你必须了解 bash 的语法和语意。除此之外,了解 bash 语言,你能够撰写你个人专属的程序,来完成你要做的事情。

PROGRAMMING OR SCRIPTING?

对于刚开始接触程序设计的新手,常会对于 programming 和 scripting 语言间的差异感到困惑。Programming 语言通常比 Scripting 语言功能更强大,也更快速。例如:C, C++, 和 Java 都是 Programming 语言。 Programming 语言通常是从源代码 (一个包含最终程序如何执行的指令集合文字档) 开始,经过编译 (建立) 成为一个可执行档。这个可执行档不容易移植到不同的操作系统中。举例来说,如果你曾在 Linux 上写过 C 的程序,你将不能够在视窗 98 系统上执行这个 C 的程序。要这样做,你必须在视窗 98 系统之下,重新编译原始的程序码。Scripting 语言也是从源代码开始,但不需编译成可执行档。而是由一个直译器读入源代码档案里的那些指令,再执行每个指令。不幸地,直译的程序通常比编译的程序慢,因为直译器必须读入每个指令。主要的优点是,你能轻松地转换源代码档案到任何的操作系统,并且立刻以直译的方式执行。bash 是一种 scripting 语言。它对撰写小程序而言是不错的,但如果你打算开发大型的应用程序, programming 语言可能对你比较有益。其他的 scripting 语言有 Perl, Lisp 和 Tcl 等等。

WHAT DO YOU NEED TO KNOW? / 那些是你需要知道的?

撰写你自己的 shell 程序,需要知道最基本的 Linux 指令。举例来说,你应该知道要如何拷贝,移动,产生新档案等等。还有一件事你必须知道,该如何使用文书编辑程序。在 Linux 里有三个主要的文字档编辑程序 - vi, emacs 和 pico。如果对 vi 或 emacs 并不熟悉,可用 pico 或一些其他容易使用文字档编辑程序。

WARNING!!! / 警告!!!

别以 root 的身份来练习!任何情况都可能发生!若你在撰写程序时发生意外的错误,导致系统当掉,我并不负责。你已被警告过了!一定要使用没有 root 权限的一般使用者帐户。你甚至可以产生一个新的使用者,专门来练习 shell 程序设计。这样,最糟的情况只是这个使用者的目录不见了。

YOUR FIRST BASH PROGRAM / 第一个 BASH 程序

我们的第一个程序会是典型的 "Hello World" 程序。不要怀疑,若你已有程序设计的经验,你现在又必须头疼了。然而,这是传统,我何德何能改变传统呢?"Hello World" 程序只是将 "Hello World" 这字眼列印到萤幕上。所以赶快打开你的文字档编辑程序,键入下列的内容:

#!/bin/bash

echo "Hello World"

第一行是告诉 Linux 用 bash 直译器来执行这个程序。在这个范例,bash 是位在 /bin 目录下。如果在你的系统上, bash 是在不同的目录,请对这行做适当的更改。另外,要特别说明的是,这个直译器是非常重要,所以请确定目录正确否,它告诉 Linux 哪一个直译器用来执行程序中的那些指令。下一步是把将程序存档。称它做 hello.sh 好了。完成后,你需要让此程序可以执行:

xconsole$ chmod 700 ./hello.sh

如果你不知道该如何更改档案的权限,就参考 chmod 的手册(manual page)。一旦更改完成后,你仅需输入程序的名字,就能执行了:

xconsole$ ./hello.sh

Hello World

就是这个光!就是这个光!你的第一个程序完成了!真的就是这样无聊,没用,然而每个人都是这样开始的。只需记得这个程序。撰写程序码,存成档案,再用 chmod 让它可执行。

COMMANDS, COMMANDS, COMMANDS / 指令,指令,指令

你的第一个程序要做什么呢?列印 "Hello World" 这两个字到萤幕上。但要怎样做呢?使用指令。在程序中写的唯一一行程序码是 echo "Hello World"。好吧,那一个是指令? echo。echo 程序带有一个参数,并将此参数列印到萤幕。

所谓参数是指在你所键入的程序名称之后的任何东西。在这个案例中,"Hello World" 是参数,它传进 echo 指令中。若你输入这样的指令 ls /home/root ,那么对 ls 而言, /home/root 是参数。就竟这代表什么呢?代表如果你有一支程序,可将参数列印到萤幕上,你就不需使用 echo 程序。我们假定有支称为 foo 的程序,能传入一个参数,一个字串,并且将其列印到萤幕上。我们能同样地重写我们的程序:

#!/bin/bash

foo "Hello World"

把它存档及更改存取模式(chmod),然后执行:

xconsole$ ./hello

Hello World

结果完全一样。究竟有唯一的程序码吗?没有。你真的能写任何程序?除非你是 echo 程序的作者。你所做的,是将 echo 程序放在你的 shell 程序内,并给一个参数。在现实的世界中,例子中 echo 指令的另一选择是 printf 指令。printf 提供比较多的控制,如果你熟悉 C 语言的程序设计就会明了。事实上,要得到完全相同的结果不必写一个 shell 程序:

xconsole$ echo "Hello World"

Hello World

bash shell 程序设计提供了多样的控制方式,而且容易学习。就如你刚看到一样,你用 Linux 指令来写你的 shell 程序了。你的 shell 程序是将其他的程序聚集在一起,来执行特定的任务。

A MORE USEFUL PROGRAM / 更有用的程序

我们将撰写一个程序,功能是移动所有的档案到一个目录内,然后删除此目录及其内容,然后再产生此目录。这可由下列的指令来完成:

xconsole$ mkdir trash

xconsole$ mv * trash

xconsole$ rm -rf trash

xconsole$ mkdir trash

不需在交谈式的 shell 上敲进所有指令,改用撰写个 shell 程序:

#!/bin/bash

mkdir trash

mv * trash

rm -rf trash

mkdir trash

echo "Deleted all files!"

把它以 clean.sh 存档,现在你所要做的是执行 clean.sh,它会移动所有的档案到一个目录,删除他们,再产生目录,而且列印一个讯息告诉你,它已成功地删除所有的档案。所以记得,如果你发现要做的某些事,要一而再,再而做三地做下去,考虑用个 shell 程序来自动执行。

COMMENTS / 注解

注解可让你的程序更容易明了,这样并不影响程序的输出结果。目的就是来特别帮你明了程序。所有在 bash 里的注解,第一个字元都是用井字符号 (hash symbol):"#",除了第一个行 (#!/bin/bash) 外。 第一行并不是注解。在第一行之后,其馀以 "#" 开始的任何一行都是注解。看下列的程序片段:

#!/bin/bash

# 这个程序从 1 记录到 10:

for i in 1 2 3 4 5 6 7 8 9 10; do

echo $i

done

即使你不知道 bash 的程序设计,因为注解的关系,也能立刻知道上述的程序在做什么事。使用注解是很好的习惯。你将发现若未来需要维护你的程序,有注解会比较容易。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有