- 浏览: 460908 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (538)
- C/C++ Primer (69)
- Objective-C Primer (102)
- Python Primer (19)
- JavaScript Primer (1)
- Java Primer (37)
- PHP Primer (17)
- 泛 Linux (37)
- Shell Script (21)
- APUE (21)
- UNP__1&2 (19)
- NetWork (7)
- Oracle周边 (38)
- Mysql里边 (6)
- Windows技 (9)
- 简单算法 & 数据结构 (14)
- 设计模式 (6)
- GTK历程 (12)
- 工具使用 (25)
- 杂事 (23)
- 一些概念 (17)
- Web方面 (10)
- myCodeTools (9)
- ^未 竟$ (13)
- 硬件通信 (2)
- Games (1)
最新评论
晕…… 鸟哥写的那篇实在太好了不打算copy之二了。
鳥哥的 Linux 私房菜:
繁体中文:
http://linux.vbird.org/linux_basic/0340bashshell-scripts.php
简体中文:
http://www.oschina.net/bbs/thread/6563?lp=1
http://blog.csdn.net/baobao8505/archive/2006/09/21/1258645.aspx
http://www.linuxidc.com/Linux/2007-06/4767.htm
http://www.ibm.com/developerworks/cn/linux/l-bash-parameters.html
http://doc.linuxpk.com/3871.html
1.1 语法基本介绍
1.1.1 开头
脚本必须以下面的行开始(必须方在文件的第一行):
#!/bin/sh
符号#!的作用是告诉系统,它应该使用什么程序,来执行该文件。
在这个例子中我们使用/bin/sh来执行程序。
使脚本可执行:chmod +x file_name
运行./file_naem
-----------------------------------------
1.1.2 注释
使用# 作注释符
-----------------------------------------
1.1.3 变量
# 对变量赋值:
Variable="hello world"
# 现在打印变量a的内容:
echo "A is:"
echo $Variable
# 有时候变量名很容易与其他文字混淆,比如:
num=2
echo "this is the $numnd"
# 这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,
# 但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量:
echo "this is the ${num}nd"
# 俺建议大家用这种
# 等号两边不能有空格
# 在编写Shell程序时,为了使变量名和命令名相区别,建议所有的变量名都用大写字母来表示。
变量的只读性:
readonly 变量名
在任何时候,创建的变量都只是当前Shell的局部变量,所以不能被Shell运行的其他命令或Shell程序所利用,
而export命令可以将一个局部变量提供给Shell执行的其他命令使用,其格式为:
export 变量名
export 变量名=变量值 # 同时赋值
使用export说明的变量,在Shell以后运行的所有命令或程序中都可以访问到。
-----------------------------------------
1.1.4.1 环境变量
由export关键字处理过的变量叫做环境变量。
预定义变量:
HOME 用于保存注册目录的完全路径名。
PATH 用于保存用冒号分隔的目录路径名,Shell将按PATH变量中给出的顺序搜索这些目录,
找到的第一个与命令名称一致的可执行文件将被执行。
TERM 终端的类型。
UID 当前用户的识别字,取值是由数位构成的字串。
PWD 当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化。
PS1 主提示符,在特权用户下,默认的主提示符是#,在普通用户下,默认的主提示符是$。
PS2 在Shell接收用户输入命令的过程中,如果用户在输入行的末尾输入“\”然后回车,
或者当用户按回车键时Shell判断出用户输入的命令没有结束时,就显示这个辅助提示符,提示用户继续输入命令的其余部分,
默认的辅助提示符是>。
-----------------------------------------
1.1.4.2 预定义变量
预定义变量和环境变量相类似,也是在Shell一开始时就定义了的变量。所不同的是,用户只能根据Shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由$符和另一个符号组成的,常用的Shell预定义变量有:
$# 位置参数的数量。
$* 所有位置参数的内容。
$? 命令执行后返回的状态。
$$ 当前进程的进程号。
$! 后台运行的最后一个进程号。
$0 当前执行的进程名。
其中,$?用于检查上一个命令执行是否正确。(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错。)
$$变量最常见的用途是用做暂存文件的名字以保证暂存文件不会重复。
-----------------------------------------
1.1.4.3 参数
位置参数是一种在调用Shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。
位置参数之间用空格分隔,Shell取第一个位置参数替换程序文件中的$1,第二个替换$2,依次类推。
$0是一个特殊的变量,它的内容是当前这个Shell程序的文件名,
所以,$0不是一个位置参数,在显示当前所有的位置参数时是不包括$0的。
-----------------------------------------
1.1.4.4 参数置换
Shell提供了参数置换功能以便用户可以根据不同的条件来给变量赋不同的值。
参数置换的变量有4种,这些变量通常与某一个位置参数相联系,根据指定的位置参数是否已经设置类决定变量的取值,
它们的语法和功能分别如下:
a. 变量=${参数-word}: # -
实例:Var=$(1-888)
如果没有$1,即用888作用默认值替换
b. 变量=${参数+word}: # +
与第一种相反,如果参数有值,则使用word来替换参数的值
c. 变量=${参数?word}: # ?
实例:
Var=${1?"请你要输参数\$1"}
Var=${1?}
echo ${1}
判断是否有$1参数,有则继续,无则退出,并打印错误信息。
错误信息由?后边的字符串,无定义则打印默认
d. 变量=${参数=word}: # =
如果设置了参数,则用参数的值置换变量的值,否则把变量设置成word,然后再用word替换参数的值。
注意。和A的相同,只是位置参数不能用于这种方式,因为在Shell程序中不能为位置参数赋值。
还有不少的。。。
-----------------------------------------
1.1.5 Shell命令和流程控制
1.1.5.1 命令:
shell脚本中可以使用任意的unix命令,常用的命令通常是用来进行文件和文字操作的。
常用命令语法及功能
echo "some text": 将文字内容打印在屏幕上
wc –l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数
grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt
cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备
比如:输出每行第5个到第9个字符cut -b5-9 file.txt
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中的通配符相混淆。比如:将'a'替换为'_'
cat text.file | sed 's/a/_/' > new.file 替换每行第一个
cat text.file | sed 'y/a/_/' > new.file 替换所有
cat text.file | sed 'y/a/_/${n}' > new.file 替换每行第n(如果有的话)个
awk: awk 用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。
cat file.txt | awk -F , '{print $1 "|" $3 }' 这里我们使用 ',' 作为字段分割符。
-----------------------------------------
1.1.5.2 概念: 管道, 重定向 和 反引号(backtick ` )
管道 (|) 将一个命令的输出作为另外一个命令的输入。
grep "hello" file.txt | wc -l
在file.txt中搜索包含有”hello”的行并计算其行数。
在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。
重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
> 写入文件并覆盖旧文件
>> 加到文件的尾部,保留旧文件内容。
反引号:将一个命令的输出作为另外一个命令的一个命令行参数。
find . -mtime -1 -type f -print
用来查找过去24小时(-mtime –2则表示过去48小时)内修改过的文件。如果您
想将所有查找到的文件打一个包,则可以使用以下脚本:
#!/bin/sh
# The ticks are backticks (`) not normal quotes ('):
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
命令A `命令B的结果作为前边命令的参数`
-----------------------------------------
1.1.5.3 流程控制
下回再贴,我得改改
发表评论
-
SSH
2013-02-28 14:29 1119高效使用 SSH 的 16 个技巧:http://blog. ... -
Shell__参数传递
2011-02-11 14:29 730#!/bin/bash echo '$# '参数个数 ... -
Shell__字符串截取
2010-10-18 10:59 1252http://blog.csdn.net/gumanren/a ... -
Shell__Script
2010-10-15 14:05 623获取目录 dirname 全路径 获取文件名 basen ... -
Shell__循环
2010-08-09 14:41 807num=1 while [ $num -le 3 ] ... -
Shell__时间戳
2010-08-09 11:35 756http://blog.chinaunix.net/u3/91 ... -
paste__多文件列合并
2010-08-05 11:35 790Linux的文本处理强啊 paste file1 ... -
Shell 解析
2010-07-27 14:39 550shell.sh sh -c "grep 'xx' ... -
Shell__比较运算符
2010-07-27 09:44 866http://blog.chinaunix.net/u/981 ... -
Shell__Date
2010-07-26 16:48 899# 遍历出本月1号~X号的日期 #!/bin/bash ... -
Shell 偶用查询
2010-07-06 15:15 684文件行数 wc -l FileName 统计当前目录下文 ... -
printf的简单使用
2010-05-27 16:50 746原文:http://hi.baidu.com/wa ... -
cut 行数据操作
2010-05-27 09:44 725http://blog.sina.com.cn/s/blog_ ... -
test命令
2010-05-19 10:55 865似乎是来至鸟哥的学习 Shell Scripts……,原地址 ... -
alias
2010-05-18 18:13 813原文:http://tieba.baidu.com/f?kz= ... -
split 文件分割与合并
2010-05-14 00:03 1179split分为两种,二进制文件模式切割和文本文件模式切割。 ... -
什么时候不使用Shell 脚本
2010-05-13 22:29 1035资源密集型的任务,尤其在需要考虑效率时(比如,排序,hash ... -
AWK简单使用
2010-05-11 17:51 1703AWK有如文本数据库的功能! awk -F ‘分 ... -
文件比较comm 与 diff
2010-05-10 10:34 754http://www.blogjava.net/w ... -
uniq 去重复行
2010-05-10 10:21 640http://www.ibm.com/developerwor ...
相关推荐
总之,“Shell脚本入门到精通教程”是一份全面的参考资料,涵盖了从基础知识到高级应用的所有内容,适合不同层次的学习者。通过系统地学习和实践,你将能够编写出高效、实用的Shell脚本来解决各种自动化问题。
Korn Shell脚本入门知识点总结 Korn Shell是AIX操作系统的缺省Shell,它允许用户与内核进行通信。 Shell脚本的主要功能是将多个命令组合在一个文件中,以便一次执行多个命令。编写Korn Shell脚本需要使用文本编辑器...
【千锋Linux】Shell脚本入门全套教程(103集),课程齐全,适合初学者,不是很详细,不是很完善,难度系数3颗星,就是常用的一些脚本编写的教程。包含pdf课件。
在本文中,我们将深入探讨Shell脚本的基础知识,帮助初学者快速入门。 一、Shell概述 Shell是操作系统提供的一种命令解释器,它为用户提供与系统交互的界面。在Linux或Unix系统中,常见的Shell有Bash(Bourne-Again...
### Shell脚本语言入门:详解与实践 #### 引言 在IT领域,Shell脚本是一种强大而灵活的工具,广泛应用于系统管理、自动化任务、数据处理等方面。它基于Unix/Linux环境,允许用户通过一系列命令行指令来实现复杂的...
Linux shell脚本入门教程 - blotemj
shell脚本是Linux操作系统中的一种编程语言,用于自动执行一系列命令。shell脚本文件是一个纯文本文件,可以使用任何文本编辑器编写,通常以.sh作为后缀名。 一、shell脚本的基本结构 shell脚本的基本结构包括: ...
学习Shell脚本不仅可以提高工作效率,也是系统管理员必备技能之一。随着经验的积累,你可以编写更复杂的脚本来解决实际工作中遇到的各种问题。记住,实践是提升Shell脚本能力的关键,多写、多调试,你会逐渐掌握这个...
Shell脚本,作为Linux/Unix系统中的编程工具,是一种强大的自动化任务执行手段。它基于Bourne shell或者其扩展版本,如bash(Bourne-Again SHell),提供了一种编写简单或复杂程序的方式,使得用户能够通过命令行...
### Linux Shell脚本入门教程知识点概述 #### 一、Shell编程的重要性与应用场景 - **重要性**: 在Linux系统中,虽然存在多种图形界面工具,但Shell作为一种强大的编程语言,能够提供更加灵活的功能支持。Shell不仅...
本PDF文档"shell-script-entry.pdf"提供了18页的基础知识,帮助初学者入门Linux Shell脚本编程。 1. **Shell简介**: - Shell是Linux或Unix操作系统中的一个命令行界面,它允许用户与操作系统内核交互,执行各种...
Shell脚本入门知识点总结 本资源摘要信息将 Shell 脚本入门的基础知识点总结,涵盖了 Shell 的定义、Bash shell 的特点、命令记忆能力、命令别名设置功能、编译型语言和脚本编程语言等方面。 什么是 Shell? ...
H5HtmlJavaScriptCSSApp, https://github.com/Romanysoft/working shell脚本入门——流程控制 shell脚本入门——流程控制 shell脚本入门——流程控制 shell脚本入门——流程控制 shell脚本入门——流程控制
用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。深入地了解和熟练地掌握Shell编程,是每一个Linux用户的...
内容概要:shell脚本入门——流程控制_本文介绍了Shell脚本中几种常用的流程控制结构,包括if语句、case语句、for循环、while循环以及until循环,每种结构都给出了具体的使用场景和实例说明,旨在帮助初学者快速掌握...
Linux Shell 脚本编程基础知识点总结 Linux 脚本编写基础 1.1 语法基本介绍 * `#!` 符号用来告诉系统它后面的参数是用来执行该文件的程序 * 在 Linux 中,使用 `/bin/sh` 来执行程序 * 编辑好脚本后,需要使其可...
内容概要:shell脚本入门——变量、字符串, 本文详细介绍了 Shell 脚本中变量和字符串的基本操作,包括变量的定义、使用和作用域,以及字符串的定义、操作和拼接。通过具体的代码示例,解释了如何定义和使用变量,...
### Shell脚本入门教程知识点详解 #### 一、Shell编程的重要性与应用场景 - **灵活性与自动化**:在Linux系统中,尽管存在丰富的图形界面工具,但Shell作为一种强大的命令行工具和编程语言,仍然具备无可替代的...
本教程将带你快速入门Shell脚本的世界,让你在短时间内掌握其基本概念和常用命令,从而提升你的系统管理效率。 一、Shell的定义与种类 Shell是一个命令解释器,它将用户输入的命令翻译成操作系统可以理解的指令执行...