大家,周末晚上好,今天来分享linux里面的shell编程(一种脚本编程),哦不,正确的说,你或许应该早就了解过脚本编程,比如说很火的python。嗯,不扯别了,趁着周末多给大家更文,之前有过半个月没更文,真对不住各位了,还有以前的文章排版也是一塌糊涂,不过庆幸的是,现在比较稍微好多了,也离不开各位网友给的意见。下面就开始详细介绍shell了:


一、shell介绍


 1、shell 它英文翻译的话就是“壳”的意思,但是在我们linux环境下,它确实是发挥了很大的作用,因为在linux环境下,shell 可以理解为软件系统提供给用户操作的命令行界面,可以说它是人机交互的一种方式(也可以说是计算机硬件与用户的翻译官),我们玩嵌入式的,装ubuntu比较多(其它linux发行版本也是一样的操作),你打开要输入命令来实现自己的需求,第一时间肯定就是打开“终端”,这个终端就是shell 了啦!它是作为用户与Linux系统内部的通信媒介,除了能够支持各种变量与参数外,还提供了诸如循环、分支等高级编程语言才有的控制结构特性,这个后面会慢慢分享。


2、但是我们在这个终端下输入命令来创建单个工程的话,是没用啥问题,但是一旦工程数量多了,再去一个一个输入的话,就拉低效率了,比如说:譬如我们要在linux下创建一个文件a.c,可以touch a.c 但是如果我现在是用在linux下创建100个文件,分别为a1.c  a2.c.....a100.c 如果这时候还是手工去命令行下执行命令创建也可以,但是很累。最好的做法就是把创建过程写成一个shell脚本程序,然后去执行这个shell脚本程序,执行这个程序的效果和手工在命令行输入那些命令效果一样的。从这里我们可以总结出来,shell有两种工作方式:


  • 交互式(Interactive):用户每输入一条命令就立即执行


  • 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令


二、shell脚本的运行机制:解释运行


1、我们做嵌入式的,对C语言和C++比较熟悉,而这两种语言编写过程是这样的:编写出源代码(源代码是不能直接运行的)然后编译链接形成可执行二进制程序,然后才能运行;而脚本程序不同,脚本程序编写好后源代码即可直接运行(没有编译链接过程)


2、shell程序是解释运行的,所谓解释运行就是说当我们执行一个shell程序时,shell解析器会逐行的解释shell程序代码,然后一行一行的去运行。(顺序结构)


3、CPU实际只认识二进制代码,根本不认识源代码。脚本程序源代码其实也不是二进制代码,CPU也不认识,也不能直接执行。只不过脚本程序的编译链接过程不是以脚本程序源代码为单位进行的,而是在脚本运行过程中逐行的解释执行时才去完成脚本程序源代码转成二进制的过程(不一定是编译链接,因为这行脚本程序可能早就编译连接好了,这里我们只是调用它)的。


三、实战一个简单shell脚本程序


1、编辑器、编译器、运行方法(脚本的3种执行方法):



  • 编辑器:shell程序是文本格式的,只要是文本编辑器都可以。但是因为我们的shell是要在linux系统下运行的,所以换行符必须是'\n',而windows下的换行符是"\r\n",因此windows中的编辑器写的shell不能在linux下运行。所以我们整个课程都是在linux下使用vi编辑器(实际上是vim,这个比较好用一点)进行编写调试的。


  • 编译器 :不涉及,因为shell是解释性语言,直接编辑完就可以运行。

  • shell程序运行的运行有多种方法,这里介绍三种方法:


    第一种:./xx.sh,和运行二进制可执行程序方法一样。这样运行shell要求shell程序必须具有可执行权限。chmod a+x xx.sh来添加可执行权限。


    第二种:source xx.sh,source是linux的一个命令,这个命令就是用来执行脚本程序的。这样运行不需要脚本具有可执行权限。


    第三种:bash xx.sh,bash是一个脚本程序解释器,本质上是一个可执行程序。这样执行相当于我们执行了bash程序,然后把xx.sh作为argv[1]传给他运行。


2、let's go 体验第一个shell程序:


在创建shell脚本程序的时候,注意一下它文件后缀是以".sh"结尾的哈,不要搞错了哈。


我们现在来创建一个test.sh的一个脚本程序,具体内容如下:


  • 首先用vim来创建一个test.sh文件:


vim test.sh


  • 然后往里面写入内容,这先写一些简单的语句,后面下篇文章有循环就复杂一点了:


#!/bin/bash

echo "hello world"


解释一下内容的意思:


第一行的脚本声明(#!)用来告诉系统使用哪种Shell解释器来执行该脚本(这是我书写shell脚本的格式);第二行是我执行的命令,这个echo的作用:echo命令用于在终端输出字符串或变量提取后的值,格式为“echo [字符串 | $变量]”。这里我执行这个脚本文件的话,就会输出"hello world" 了。


  • 输出结果,这里刚才上面说的那三种都测试一下:



root@txp-virtual-machine:/home/txp# ./test.sh
bash: ./test.sh: Permission denied
root@txp-virtual-machine:/home/txp# chmod 777 test.sh
root@txp-virtual-machine:/home/txp# ./test.sh
hello world
root@txp-virtual-machine:/home/txp# source test.sh
hello world
root@txp-virtual-machine:/home/txp# bash test.sh
hello world


这里可能执行的时候,没有权限,可以使用chmod这个命令来修改权限问题。


  • 小结:


    shell就是把以前命令行中键入执行的命令写成了程序。shell其实就是为了避免反复的在命令行下手工输入而发明的一种把手工输入步骤记录下来,然后通过执行shell脚本程序就能再次复述原来记录的手工输入过程的一种技术。


    shell编辑完可以直接运行(不需编译)。



四、总结:


今天的分享只让大家简单的认识一下linux-shell编程。这里有linux命令不熟的小伙伴,可以去学习一下刘遄老师的linux就该这么学这本书,非常适合入门,通俗易通,网站地址:

https://www.linuxprobe.com/  。


好了,今天的分享就到这里了,有错误可以指出来哦,大家相互学习,取长补短。我是“爱分享、爱学习、爱技术、爱生活”的txp,欢迎来交流,