第二章 shell编程基础
脚本传递参数
为什么要向shell脚本传递参数?参数传递可以将外部的值传递到脚本的内部函数中,提高脚本的灵活性;参数传递可以添加脚本的适用选项,增加脚本的可定制性,以应付不同的情况。
$#代表参数的个数
$@代表参数的内容
如果你拥有的参数多于9个,则不能使用$l0来引用第l0个参数。首先,必须处理或保存第一个参数($1),然后使用shift命令删除参数$1,并将所有剩余的参数下移一位,因此$10就变成了$9,以此类推。$#的值将被更新以反映参数的剩余数量。在实践中,最常见的情况是将参教迭代到函数或shell脚本,或者迭代到命令,替换使用for语句创建的列表,因此这个约束基本不成问题。
实例脚本
[hcr@slave2 temp]$ cat ~/bin/ps.sh
#!/bin/sh
ps -ef |grep $@
[hcr@slave2temp]$ ps.sh firefox
hcr 2417 1784 0 17:00 pts/0 00:00:00 /bin/sh /home/hcr/bin/ps.shfirefox
hcr 2419 2417 0 17:00 pts/0 00:00:00 grep firefox
[hcr@slave2 temp]$
IO重定向
标准输入、标准输出与标准错误
程序读取输入(数据的来源)、运算后输出(数据的目的端),以及报告异常和错误,这三者就是标准输入(standard input )、标准输出( standard output)和标准错误( standard error )。
许多unix的程序都遵循这个原则—从标准输入读入,经过处理,从标准输出输出。遵循这个原则的程序往往被称为过滤器(filter)。过滤器加管道,这是unix的世界:并且,宽进严出的程序是受人称赞的。
管道和重定向
从标准输入读入,从标准输出输出,将异常及错误报告到标准错误。这是遵循UNIX哲学的软件正确行为。但是,我们总不能将所有的输入和输出都集中在黑乎乎的字符界而,我们还要读写文件、看视频、听音乐、还要打游戏,这些人机交互的输入和输出都来自不同的设备或文件。
因此,shell提供了数种语法和标记,用以改变默认输入端和输出端。
1. > 改变标准输出、(会删除文件b.txt内容)
[hcr@slave2 temp]$ echo 'abc' > b.txt
2.< 改变标准输入
[hcr@slave2 temp]$ cat < b.txt > c.txt
3.>>追加文件内容(不会删除文件内容)
[hcr@slave2 temp]$ cat < b.txt >> c.txt
4.| 建立管道
[hcr@slave2 temp]$ head -n10 /etc/passwd | grep bash
5.小实例
[hcr@slave2 temp]$ cat /etc/passwd | while read line ; doecho $line >> c.txt; done;
管道的数据共享在Linux内核中是通过内存拷贝实现的。相较于CPU的运算,数据的移动往拄更消耗时间。因此,在设计管道时,要尽量把能够减少数据量的操作五于管道的前端。这样一来数据拷贝快速。二来程序运算量减少. 例如,在sort之前,使用grep找出相关数据,可以减少许多sort的运算量
文件描述符
内核(kernel)利用文件描述符(filedescriptor)来访问文件。文件描述符是非负整数。打开
现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。
特殊文件的妙用
1./dev/null
/dev/nul就是一个黑洞。当一些文件不想输出或者标准输出或者错误输出的时候可以把输出指定到黑洞。
实例:
cat /etc/passwd | while read line ; do cat$line 2>/dev/null; done;
如果不加2>/dev/null;肯定会报一些
cat: root:x:0:0:root:/root:/bin/bash: 没有那个文件或目录
…..
之类的东西,如果不想看到这些信息就可以把这些错误信息放入到黑洞中。
1> 重定向标准输出
2> 代表错误标准输出
&>代表标准输出和错误标准输出
2./dev/zero
/dev/zero的主要用途就是用来创建一个指定长度、并且初始化为空的文件,这种文件一般都用作临时交换文件。
3./dev/tty
/dev/tty是一个很实用的文件。当程序打开这个文件时,UNIX/LINUX前所处的终端。输出到此的信息只会显示在当前工作的显示器。在某些时候〔例如设定了脚本输出到/dev/null)时,而你又想在当前终端显示一些很重要的信息,就可以调用这个设备,写入重要信息。这样做可以强制信息显示到终端。
#!/bin/sh
printf "Enter new PWD"
stty -echo
read pass < /dev/tty
printf "Enter new PWD agin"
read pass2 < /dev/tty
stty echo
if [ "$pass" -eq "$pass2" ] ; then
echo "right"
else
echo "wrong"
exit 1
fi
exit 0
基本文本检索
grep命令检索文本
详细参考:
http://www.cnblogs.com/end/archive/2012/02/21/2360965.html
unix、linux 系统的设计和编程
一切皆文件
文件类型
http://www.cnblogs.com/acpp/archive/2009/12/05/1617547.html
unix编程基本原则
KISS原则
分享到:
相关推荐
本文将基于《LINUX与UNIX SHELL编程指南》这本书的读书笔记,深入探讨Linux与Unix Shell编程的核心知识点。 一、Shell概述 Shell是一个命令解释器,它接收用户输入的命令并执行。在Linux和Unix系统中,常见的Shell...
Linux是开源的操作系统,它的命令行界面,尤其是Shell编程...因此,无论你是技术小白还是希望进一步提升,这份“Linux零基础学习笔记 Shell编程-菜鸟入门”都会是你宝贵的资源。祝你在学习的道路上越走越远,不断进步!
shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人...
shell编程-shell编程-分支语句(1) shell编程-shell编程-分支语句(2) shell编程-shell编程-循环语句(1) shell编程-shell编程-循环语句(2) Linux的shell编程(一) Linux的shell编程(二) Linux的...
### 学习笔记-基础Shell编程 #### 一、Shell编程概述 Shell编程是指利用Shell命令语言编写脚本来实现特定功能的过程。Shell不仅是Linux操作系统下的命令行解释器,还是一种强大的脚本语言,广泛应用于自动化任务...
### Shell学习笔记 #### Shell的发展与分类 Shell作为Unix及类Unix系统(包括Linux)的主要用户界面之一,其历史可以追溯到...以上内容涵盖了Shell编程的基础知识和技术要点,是初学者入门Shell编程的重要参考资料。
描述:这是一份综合的Linux Shell编程笔记,适用于想要学习或加强对Linux操作系统下Shell脚本编程的理解的人。该笔记包含了Shell脚本的基础知识、常用命令和技巧,以及实际的编程示例和案例。无论您是初学者还是有...
"shell编程笔记.zip_programy5v_shell_shell编程"这个压缩包包含了有关Shell编程的详细资料,特别是“shell编程笔记.pdf”文件,很可能是对这一主题的深入讲解。 首先,Shell编程的基础知识包括了解不同的Shell类型...
Shell脚本编程详解-吐血共享
"Unix Shell编程第三版笔记"是铁道出版社出版的一本教材,它深入浅出地讲解了Unix Shell编程的基础和高级技巧。这份笔记涵盖了从基本的命令行操作到复杂的脚本编写,帮助学习者掌握这一强大的自动化工具。 Unix ...
要介绍了shell的相关知识教程,如shell编程需要的基础知识储备、shell脚本概念介绍及第一个脚本案例、shell脚本基础知识-作用地位-比其他语言优势、建立一个规范的shell脚本、执行shell脚本的多种方法及重要区别精讲...
《Linux命令行与Shell脚本编程大全》随书的一些源码、笔记_Linux_Shell-Bash-
变量: 变量的赋值和引用 在shell编程中变量没有类型,简称弱类型编程语言,不需要声明,在引用这个变量时会创建它(在变量名前加$符号引用变量的值)。在定义变量时,若String中包含空格、制表符、换行符,需用单...
《LINUX与UNIX SHELL编程指南》读书笔记-二次发布版.pdf
这是我的shell编程笔记,我有很多自己的学习笔记,供我以及大家复习使用,还有其他的哦 C语言笔记,java笔记,网页笔记,javaweb笔记,gcc笔记,等,我会慢慢传
### Shell Script 编程学习笔记 #### 一、Shell 脚本初窥 ##### 示例: ```bash #!/bin/sh # 第1行:指定脚本解释器(声明使用的shell名称),这里是用/bin/sh做解释器的。“#!”是一个约定的标记 cd ~ # 第2行:...
Linux Shell编程-流程控制与循环(MD笔记)