在2013年的时候,开始学Linux,为了熟练使用vim编辑器和Linux操作,我把当时在windows下开发ARM的所有源文件,都转移到了Linux下。在那时候便学会了一些简单的Shell脚本编程。但随着2013年底开始做FPGA逻辑设计,开发平台就全部转移到了windows下,这样Shell脚本编程已经基本忘的差不多了。时间进入2017年,P-SOC的开发越来越多地使用在Linux环境下,所以使用Shell脚本提高工作效率,就变得十分有必要了。故才有Shell脚本设计这个系列。
在本篇中主要介绍什么是Shell,以及Shell Script的基础知识。
==========下面是写给冬冬的科普==========
什么是脚本?
“脚本”是“批处理文件”的延伸,所谓“批处理”,就是进行批量处理,比如写一个程序控制同时打开一个文件夹下的所有.doc(word)文件。这个写好的程序统称为“脚本”。如果是在windows平台下,这个写好的程序叫做“批处理文件”,它的扩展名是.bat(常见)或.cmd(不常见),在需要运行的时候,直接双击.bat文件就可以了。在Linux平台下,shell脚本的功能与在Windows平台下批处理文件的功能是类似的。
无论是批处理文件还是shell脚本,在设计的时候都是需要按照一定的“格式”来进行的,这称之为脚本语法。
有一个程序员,以前在windows系统下工作,每天下班后都要关机(公司要求,省电),这样第二天来第一件事就是把昨天所有关闭的文件都用鼠标一个一个地点开。他比较勤快,所以这个还能接受。突然后一天,领导发现他在工作时间玩大型单机游戏,然后就强制他必须在Linux系统下写程序。在一开始,同样他第二天来上班,都要输入命令来打开前一天关闭的文件(鼠标不好使),直到有一天他实在忍受不了每天都花十多钟时间输入相同的命令来打开文件,并且有时候他都忘了文件存在哪儿了。这时他就在想:“我能不能写一个程序,让重复性比较多的命令自动执行,打开文件?”经过一段时间钻研后,他终于写出来了,这个程序叫做“脚本”,从此他每天就节省下来十分钟时间,开心地玩“王者农药”了(to naive,不用加班吗?)
最后,你现在所学的python也是一种脚本语言。
========================================
什么是Shell
shell是用来解决用户与操作系统进行沟通通信的“工具”,shell是“壳”,区别于“核”,这个“核”就是操作系统的内核,例如对于Linux系统来说,Linux的核叫做kernel,Kernel是直接与计算机硬件来进行数据交互的。而壳有很多种,常见的有bash,sh,KDE,XFCE等。
举一个例子:程序员编写了一个shell脚本,用来打开硬盘上存放着的10张图片。shell脚本的任务是对kernel发送指令,kernel接收到“打开图片”的指令后,就直接去对应的硬盘位置寻找图片,并执行“打开”操作。当计算机硬件执行完成图片打开命令后,会将一些回传的数据传送给kernel,例如“打开成功”数据,然后kernel将“打开成功”命令发送给shell,程序员就知道图片打开成功了(当然程序员也可以直接查看打开的10张图像是否正确来确认是否shell执行成功)。
shell环境
Shell脚本编程跟java、php、python等一样,只要有一个能编写代码的文本编辑器和一个能解释执行脚本的解释器就可以了。Linux的Shell种类很多,常见的有:
- Boume Shell (/usr/bin/sh 或 /bin/sh)
- Boume Again Shell (/bin/sh)
- C Shell (/usr/bin/csh)
- K Shell (/usr/bin/ksh)
- Shell for Root (/sbin/sh)
- ...
在本系列中关注的是Bash,也就是Boume Again Shell,其主要的特点是易用和免费,由于以上两点原因,Bash在日常工作中被广泛使用。同时,Bash也是大多数Linux发布版本默认的Shell。
在一般情况下,人们并不区分Boume Shell和Boume Again Shell,所以像#!/bin/sh,它同样也可以改为#!/bin/bash。
#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序。
第一个Shell脚本程序
在Linux下使用vim新建一个文本编辑器,新建一个扩展名为.sh的文件,文件名取为hello。即hello.sh。需要说明的是.sh的扩展名只是为了使程序员能很容易知道这是一个脚本文件,对于计算机来说,扩展名并不影响脚本的执行,即计算机不认识扩展名。
输入第一个shell脚本程序
#!/bin/sh
echo "Hello World"
如上所说,#!是告诉系统这个脚本需要哪一种解释器来执行,即使用哪一种Shell。
echo命令用于向窗口输出文本。
Shell脚本执行
Shell脚本程序已经有了,那么怎么来执行Shell脚本呢?
- 作为可执行程序
将上面的Shell脚本程序保存为hell.sh,使用cd命令切换到相应的目录,同时使用chmod命令来给hello.sh脚本添加执行权限:
chmod +x hello.sh
在使用上条语句使hello.sh语句具有可执行权限后,使用下面的命令执行脚本
./hello.sh
- 作为解释器参数
这种运行方式是:直接运行解释器,其参数就是shell脚本的文件名,如:
bash hello.sh
这种方式就是告诉系统使用哪种解释器来执行脚本。