没有合适的资源?快使用搜索试试~ 我知道了~
Shell Coding
需积分: 0 0 下载量 138 浏览量
2012-01-30
12:35:08
上传
评论
收藏 118KB PDF 举报
温馨提示
试读
15页
本文结合大量实例阐述如何编写一个 shell 脚本。 为什么要进行 shell 编程 在Linux 系统中,虽然有各种各样的图形化接口工具,但是shell仍然是一个非常灵活的工 具。Shell 不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用 shell 使 大量的任务自动化,shell 特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携 性比效率更重要的任务。
资源详情
资源评论
资源推荐
Shell 编程
摘要:
本文结合大量实例阐述如何编写一个 shell 脚本。
为什么要进行 shell 编程
在 Linux 系统中,虽然有各种各样的图形化接口工具,但是 shell 仍然是一个非常灵活的工
具。Shell 不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用 shell 使
大量的任务自动化,shell 特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携
性比效率更重要的任务。
下面,让我们一起来看看 shell 是如何工作的:
建立一个脚本
Linux 中有好多中不同的 shell,但是通常我们使用 bash (bourne again shell) 进行
shell 编程,因为 bash 是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用
bash(但是在大多数情况下,这些脚本同样可以在 bash 的大姐,bourne shell 中运行)。
如同其他语言一样,通过我们使用任意一种文字编辑器,比如 nedit、kedit、emacs、vi
等来编写我们的 shell 程序。
程序必须以下面的行开始(必须方在文件的第一行):
#!/bin/sh
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这例子中我们使用/bin/sh
来执行程序。
当编辑好脚本时,如果要执行该脚本,还必须使其可执行。要使脚本可执行:
chmod +x filename
然后,您可以通过输入: ./filename 来执行您的脚本。
注释
在进行 shell 编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在
程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在
很短的时间内明白该脚本的作用及工作原理。
变量
在其他编程语言中您必须使用变量。在 shell 编程中,所有的变量都由字符串组成,并且您
不需要对变量进行声明。要赋值给一个变量,您可以这样写:
变量名=值
取出变量值可以加一个美元符号($)在变量前面:
#!/bin/sh
#对变量赋值:
a="hello world"
# 现在打印变量 a 的内容:
echo "A is:"
echo $a
在您的编辑器中输入以上内容,然后将其保存为一个文件 first。之后执行 chmod +x first
使其可执行,最后输入./first 执行该脚本。这个脚本将会输出:
A is:
hello world
有时候变量名很容易与其他文字混淆,比如:
num=2
echo "this is the $numnd"
这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为 shell 会去搜索变
量 numnd 的值,但是这个变量时没有值的。可以使用花括号来告诉 shell 我们要打印的是
num 变量:
num=2
echo "this is the ${num}nd"
这将打印: this is the 2nd
有许多变量是系统自动设定的,这将在后面使用这些变量时进行讨论。
如果您需要处理数学表达式,那么您需要使用诸如 expr 等程序(见下面)。
除了一般的仅在程序内有效的 shell 变量以外,还有环境变量。由 export 关键字处理过的
变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环
境变量。
Shell 命令和流程控制
在 shell 脚本中可以使用三类命令:
1)Unix 命令:
虽然在 shell 脚本中可以使用任意的 unix 命令,但是还是由一些相对更常用的命令。这些
命令通常是用来进行文件和文字操作的。
常用命令语法及功能
echo "some text": 将文字内容打印在屏幕上
ls: 文件列表
wc –l filewc -w filewc -c file: 计算文件行数计算文件中单词数计算文件中的字符数
cp sourcefile destfile: 文件拷贝
mv oldname newname : 重命名文件或移动文件
rm file: 删除文件
grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt
cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输
出每行第 5 个到第 9 个字符 cut -b5-9 file.txt 千万不要和 cat 命令混淆,这是两个完全不
同的命令
cat file.txt: 输出文件内容到标准输出设备(屏幕)上
file somefile: 得到文件类型
read var: 提示用户输入,并将输入赋值给变量
sort file.txt: 对 file.txt 文件中的行进行排序
uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq
expr: 进行数学运算 Example: add 2 and 3expr 2 "+" 3
find: 搜索文件比如:根据文件名搜索 find . -name filename -print
tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile
basename file: 返回不包含路径的文件名比如: basename /bin/tux 将返回 tux
dirname file: 返回文件所在路径比如:dirname /bin/tux 将返回 /bin
head file: 打印文本文件开头几行
tail file : 打印文本文件末尾几行
sed: Sed 是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将
结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。 不要和
shell 中的通配符相混淆。比如:将 linuxfocus 替换为 LinuxFocus :
cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file
awk: awk 用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F 指定其他
分割符。cat file.txt | awk -F, '{print $1 "," $3 }'这里我们使用,作为字段分割符,
同时打印第一个和第三个字段。如果该文件内容如下: Adam Bor, 34, IndiaKerry
Miller, 22, USA 命令输出结果为:Adam Bor, IndiaKerry Miller, USA
剩余14页未读,继续阅读
ThinkInside
- 粉丝: 280
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0