发信人: hoopdream (大叻街角的女孩), 信区: Unix
标 题: 30分钟搞定BASH脚本编程 zz
发信站: BBS 水木清华站 (Wed Feb 4 11:19:55 2004), 站内
【 以下文字转载自 FreeBSD 讨论区 】
祇獺: benny.bbs@bbs.szu.edu.cn (妹看刀与妹看剑), 獺跋: FreeBSD
夹 肈: 30分钟搞定BASH脚本编程 zz
祇獺: 深圳大学荔园晨风BBS (Wed Feb 4 11:13:59 2004)
锣獺: SMTH!maily.cic.tsinghua.edu.cn!news.ccie.net.cn!SZU
http://www.chinaunix.net 作者:chu888 发表于:2003-04-10 10:21:19
30分钟搞定BASH脚本编程
chu888@263.net
一个最简单的脚本
这篇指南将通过一些例子来帮助大家学习功能强大的shell脚本编程.
在这一节中我将学习一些简单的脚本,它将有利于你深入学习一些知识。
一个最经典的Hello World程序
#!/bin/bash
echo Hello World
这个脚本只有二行,它的第一行这个脚本程序由那个程序来解释.第二行只有一个简单的
动作,它的功能是在终端上打印出一行”Hello World” 。如果你测试着执行这个命令时
(./hello.sh),你将会得到一个command not found的信息,这种情况大部分可能是你的
第一行#!/bin/bash这个程序有问题,你一定要确保bash可以找到并且可用。(一般情况下
你还要对这个脚本附一个可执行权限)
#chmod u+x hello.sh
一个非常简单的备份脚本
#!/bin/bash
tar -cZf /var/my-backup.tgz /home/me/
在这个脚本中,它替换了上一个例子的将一行信息打印在终端上的功能,取尔代之的是一
个备份/home目录的tar备份命令。
关于重定向的一些信息
最基本的理论基础
这里有对于三个文件的重定向定义: stdin(标准输入), stdout(标准输出) and
stderr(标准错误输出) (std=standard).
基本上你可以
1. 重定向 stdout 到一个文件
2. 重定向 stderr 到一个文件
3. 重定向 stdout 到stderr
4. 重定向 stderr 到 stdout
5. 重定向 stderr 到 stdout 中并且成为一个文件
6. 重定向 stderr and stdout to stdout
7. 重定向 stderr and stdout to stderr
在Linux中 1代表 '标准输出', 2代表’标准错误’
标准输出
这个例子将会使ls的显示结果重定向到一个文件中.
ls -l > ls-l.txt
标准错误
这个例子将会使grep命令在运行过程中出现的错误输出到一个文件中
grep da * 2> grep-errors.txt
管道
这一节我们将解释一个非常简单的并且你以后一定会用到的功能,它就是管道。
为什么大家都会用到管道?
管道可以使你非常方便的将一个程序的结果转向到另外一个程序中。
一个sed的例子
这个例子使用了非常简单的管道功能:
ls -l | sed -e "s/[aeio]/u/g"
当我们执行以下命令后:首先ls –l会先执行并且它会输出结果信息但是如果它的后面跟
是一个管道符的话,那么它就会将结果重新定向到sed这个程序中,sed使用了替换功能,
所以这个例子执行完会,会将ls –l结果中所有含有aeio的英文单词替换成单词u.
通过另外的方法实现ls –l *.txt
也许这种方法不同于ls –l *.txt,但是它避免了出现一条 No Such file Or Directory这
种信息。
ls -l | grep ".txt"
当ls –l 执行后,它会将程序结果输出到grep这个程序中,并且去匹配.txt这条信息。
变量
你可在任何编程语言中使用变量,但是在脚本编程中它们是没有类型的,简称弱类型编程
语言,在这个变量中可以保含一个数字,一个字符串,一个单词等。你并不需要声明这个
变量,它会在引用这个变量时创建它。
使用变量来实现一个简单的Hello World
#!/bin/bash
STR="Hello World!"
echo $STR
第二行建立一个STR的变量并且为其附了一个“Hello World”的字符串变量值。当在这个
变量前面加上一个$符号时,我们就将会得到这个变量的值。
例子(一个使用变量的备份脚本)
#!/bin/bash
OF=/var/my-backup-$(date +%Y%m%d).tgz
tar -cZf $OF /home/me/
局部变量
局部变量的生命是有限的,请看下面的例子
#!/bin/bash
HELLO=Hello
function hello {
local HELLO=World
echo $HELLO
}
echo $HELLO
hello
echo $HELLO
条件语句
条件语句可以使你决定是完成一个运作或是不去完成一个动作时,通过一些判断来实现,
一般情况都是通过一些操作符来实现判断。
条件语句可以有许多实现方法,最多的情况是基于if expression then 这种情况,也就是
大家常常说的if判断语句。它的语法基本结构如下:
if [expression];
then
code if 'expression' is true.
fi
一个最基本的使用if ...then的例子
#!/bin/bash
if [ "foo" = "foo" ]; then
echo expression evaluated as true
fi
这段代码执行if判断,如果foo等于foo的话,那么你就会执行then语句下的输出语句,最
后通过fi来结束,这里我要强调一点,就是很多新手在输入源码时特别是在if 语句后面
没有空格,在大括号后面没有空格,在等号两边没有空格,这些都会制造出一些麻烦的。
一个简单的控制if .. then ...else
#!/bin/bash
if [ "foo" = "foo" ]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi
6.4 通过变量进行判断控制
#!/bin/bash
T1="foo"
T2="bar"
if [ "$T1" = "$T2" ]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi
7. 循环结构
在这一节中,你将会学习for、while、until loops循环
对于for 循环它有一点不同于其他的编程语言,它有一点像VB中的for each语句,就是
所谓的递归的循环。
对于while循环,它其实是一个加强的if语句,如果它的条件为真,那么它就一直执行
while循环中的语句中的内容。
7.1 For sample
#!/bin/bash
for i in $( ls ; do
echo item: $i
done
在第二行上,我们声明了一个i的变量,它将一直将ls命令的结果全部循环出来。其中do
和done之间是所要执行的代码。
While循环例子
#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]; do
echo The counter is $COUNTER
let COUNTER=COUNTER+1
done
这里面大家可能看到一个-lt的命令选项,这里它代表小于等于
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
Until的例子
#!/bin/bash
COUNTER=20
until [ $COUNTER -lt 10 ]; do
echo COUNTER $COUNTER
let COUNTER-=1
done
函数
对于大多数编程语言,你都可以调用函数来执行一段代码,这样可以使用减少重复的书写
代码。
函数的例子
#!/bin/bash
function quit {
exit
}
function hello {
echo Hello!
}
hello
quit
echo foo
在2-4行包含了一个quit函数,在5-7行包含了 hello函数,如果你不是很确定这个脚本是
是什么意思,那么我建议试试它。Notice that a functions don't need to be declared
in any specific order.
当你运行这个脚本时你的程序将会最先调用hello函数,以后再调用quit函数最后才执行
echo 输出命令。
在函数中使用参数
#!/bin/bash
function quit {
exit
}
function e {
echo $1
}
e Hello
e World
quit
echo foo
这个脚本几乎和前一个脚本没有什么不能,但最主要的不同是e这个函数可以使用参数了。
用户接口
使用select命令制作简单的菜单
#!/bin/bash
OPTIONS="Hello Quit"
select opt in $OPTIONS; do
if [ "$opt" = "Quit" ]; then
echo done
exit
elif [ "$opt" = "Hello" ]; then
echo Hello World
else
clear
echo bad option
fi
done
如果你运行这个脚本你将会看到一个非常简单的菜单
使用read读入用户输入
在多数情况下你可能会用到提示请进行输入这种状态并且有几种方法可以用。这是其中的
一种方法:
#!/bin/bash
echo Please, enter your name
read NAME
echo "Hi $NAME!"
对于变量来说,你可以通过多个值来读入。
#!/bin/bash
echo Please, enter your firstname and lastname
read FN LN
echo "Hi! $LN, $FN !"
算术操作
使用以下的命令:
echo 1 + 1
如果你希望看到2,那么你会很失望,那么我们应该如何进行操作哪? echo $((1+1))
我们可以使用以下方法:
echo $[1+1]
算术操作
+
-
*
/
% (remainder)
关系操作
-lt (<
-gt (>
-le (<=)
-ge (>=)
-eq (==)
-ne (!=)
分享到:
相关推荐
根据提供的文件信息,我们可以从中提炼出关于Bash...以上仅是Bash Shell的部分基础知识,随着深入学习,您还将接触到更高级的主题和技术,如信号处理、进程控制等。希望这些知识点能帮助您更好地理解和使用Bash Shell。
标题中的“OS + Linux Shell bash / sh / ksh / csh / tcsh / adb shell”涉及的是Linux操作系统中常用的命令行解释器,也就是Shell。这些Shell各有特点,但都用于与操作系统进行交互,执行命令、编写脚本。下面将...
Linux Shell脚本是Linux操作系统中的一种重要编程工具,它基于Bourne Again SHell (Bash),是Linux环境中最常用的命令...通过深入学习这些内容,你将能够熟练地编写和调试Linux Shell脚本,提高Linux系统的使用效率。
《学习Bash Shell》 Bash Shell是Unix和Linux操作系统中最常用的一种命令行解释器,全称为Bourne-Again SHell,它是GNU项目的一部分,由自由软件基金会维护。掌握Bash Shell对于提升Linux操作效率、编写自动化脚本...
### Bash Shell 学习笔记知识点概览 #### 1. 引言 - **Shell**:作为用户与操作系统之间的桥梁,Shell提供了一种与系统进行交互的方式,支持用户执行命令和编写脚本来自动化任务。 - **Bash**:是Bourne-Again ...
通过以上对标题、描述和部分内容的分析,我们可以看出《Linux Shell Scripting with Bash》这本书是一本非常全面且实用的学习资源,对于希望深入了解Bash Shell编程的读者来说具有极高的价值。无论是作为入门教材...
要学习Shell脚本,需要具备以下基本条件: 1. Linux系统下的简单命令 2. 简单的if、while循环 3. Linux系统下的小工具(sed、awk、grep等) Shell脚本格式 Shell脚本需要遵循一定的格式,包括: 1. Shebang(#!...
总的来说,通过学习《Learning the Bash Shell》,读者将能够熟练掌握Bash shell的各个方面,无论是日常的命令行操作,还是编写复杂的shell脚本,都能游刃有余。这不仅可以提升Linux系统的使用效率,还能为成为一名...
这个源代码包包含了bash 4.2版本的完整源码,对于学习shell脚本编程、理解shell内部工作机制以及进行系统级编程有着极高的参考价值。 首先,bash shell是基于原始的Bourne shell(sh)进行改进和扩展的,它不仅保留...
### Linux Shell Scripting with Bash #### 核心知识点解析 **1. Linux Shell Scripting 基础** - **Shell 的概念与作用** - Shell 是一个命令解释器,是用户与操作系统之间的交互界面。 - 用户通过输入命令,...
Linux Bash Shell 中文...这个手册通过这些章节全面地介绍了Bash Shell的各个方面,对于学习和掌握Bash编程和Linux系统管理至关重要。无论是新手还是经验丰富的用户,都能从中找到解决问题的线索和优化工作效率的方法。
根据给定的"Bash shell学习笔记"文件信息,我们可以从中提炼出多个重要的IT知识点,具体如下: ### 1. 引言 - **Shell的角色**:Shell作为一个命令解释器和编程语言,在用户与UNIX/Linux系统内核之间提供了一个桥梁...
学习这份"Advanced Bash Shell Guide",您将能够熟练地编写复杂的Shell脚本,解决日常任务,甚至构建复杂的自动化系统。在Unix和Linux环境中,Bash Shell技能是一项基础且不可或缺的工具,对于任何IT从业者而言都...
Bourne-Again Shell (bash) 是 Linux 和其他类 Unix 操作系统中最常用的 shell 之一。掌握 bash 脚本语言对于提高 Linux 日常使用的效率至关重要。通过 bash 编程,不仅可以提升日常操作的生产力,还能更好地利用...
这份"Linux Shell脚本学习文档"是针对初学者的一份详细教程,旨在帮助读者快速理解和掌握Bash Shell脚本的基本概念和用法。 首先,让我们从基础开始。在Shell脚本中,每一行都是一个命令或指令,可以执行诸如创建、...
3. **Bash学习资源** - **Bash中文MAN手册**:提供了详尽的Bash命令和函数的官方文档,包括语法、选项和使用示例。 - **Bash脚本编程指南**:这份CHM版的手册提供了全面的教程,从基础到高级,适合初学者和进阶者...