239-shell脚本编程(1)

为什么用shell脚本编程?

239-shell脚本编程(1)_第1张图片

helloword示例

脚本程序的后缀一般以.sh结尾,但是不是强制的。
脚本程序的第一行以#!开头 然后加上当前脚本的解释器。

239-shell脚本编程(1)_第2张图片
echo相当于C语言的printf!
如何执行?
在这里插入图片描述
正确写法如下:
方法1:
在这里插入图片描述
方法2:
在这里插入图片描述
这两种方法本质上是一样的。

编译型和解释型

解释型:运行需要解释器,效率相对低一些。PHP,Python就是解释型。

编译型:需要编译链接生成可执行程序。main.c->main.exe。C/C++/Go语言就是编译型。

java有编译型的特点也有解释型的特点。Java需要解释器:Java虚拟机。Java虚拟机不能跨平台。Java的代码经过Java的编译器生成.class文件,文件格式是固定的,被java虚拟机执行。在Windows上安装的虚拟机可以执行.class文件,在Linux上安装的虚拟机可以执行.class文件。执行效率不如C/C++,因为C/C++直接执行在主机上。而java执行和主机隔着Java虚拟机。性能比C/C++低。但是Java的优势是有Java虚拟机,把底层硬件,操作系统与用户层面代码隔离开,可以把热点代码转换为本地代码,但是这就无法跨平台了。
239-shell脚本编程(1)_第3张图片

变量

我们的变量是没有类型的!
本地变量,环境变量,参数变量
#是屏蔽的作用!
在这里插入图片描述
本地变量(用户自己定义的变量)
在这里插入图片描述

我们可以把100看成数字也可以看成是字符串。
变量名=变量值 注意:中间不能有空格,是紧密相连的!!!

赋值=的左边,右边不能有空格!!!
$变量名:取变量的值。
这里的双引号是弱引用,里面的 $可以取变量的值。

239-shell脚本编程(1)_第4张图片
在这里插入图片描述
如果只有一个hello,可加可不加双引号,但是hello word中间有空格,必须加双引号才可以。不然只能会把空格前的字符串赋值进去
239-shell脚本编程(1)_第5张图片
如果有单引号呢?(类似于C语言的双引号作字符串)
239-shell脚本编程(1)_第6张图片
在这里插入图片描述
可以通过另一个变量来赋值这个变量
239-shell脚本编程(1)_第7张图片
在这里插入图片描述
从键盘获取值read
239-shell脚本编程(1)_第8张图片

239-shell脚本编程(1)_第9张图片
脚本中的一个变量可以表示很多类型
239-shell脚本编程(1)_第10张图片
环境变量(从父进程继承来的,我们没有定义但是可以使用)
239-shell脚本编程(1)_第11张图片
239-shell脚本编程(1)_第12张图片
239-shell脚本编程(1)_第13张图片
$0:脚本的名字
$#:脚本的参数个数
$$ :脚本的pid,实际上就是解释器的pid。

239-shell脚本编程(1)_第14张图片

239-shell脚本编程(1)_第15张图片
239-shell脚本编程(1)_第16张图片
参数变量
$ 1就是第一个变量,$ 2就是第二个变量, $ 9 就是第九个变量,只能传9个参数。用$ *传全部参数。
\是转义的作用。
239-shell脚本编程(1)_第17张图片
239-shell脚本编程(1)_第18张图片
239-shell脚本编程(1)_第19张图片
239-shell脚本编程(1)_第20张图片

条件

239-shell脚本编程(1)_第21张图片
239-shell脚本编程(1)_第22张图片
239-shell脚本编程(1)_第23张图片
239-shell脚本编程(1)_第24张图片

除了给变量赋值不能有空格,其他的书写都要空格!!!

if写法1:
239-shell脚本编程(1)_第25张图片
239-shell脚本编程(1)_第26张图片
if写法2:
239-shell脚本编程(1)_第27张图片
239-shell脚本编程(1)_第28张图片
加上双引号,防止空值
239-shell脚本编程(1)_第29张图片
在这里插入图片描述
判空操作
239-shell脚本编程(1)_第30张图片
239-shell脚本编程(1)_第31张图片

if else

239-shell脚本编程(1)_第32张图片
239-shell脚本编程(1)_第33张图片

else if

239-shell脚本编程(1)_第34张图片
239-shell脚本编程(1)_第35张图片
239-shell脚本编程(1)_第36张图片
239-shell脚本编程(1)_第37张图片

从键盘输入成绩的应用例子

239-shell脚本编程(1)_第38张图片
239-shell脚本编程(1)_第39张图片

239-shell脚本编程(1)_第40张图片
239-shell脚本编程(1)_第41张图片

for循环

239-shell脚本编程(1)_第42张图片
在这里插入图片描述
239-shell脚本编程(1)_第43张图片
一般情况下,for后面给个命令
239-shell脚本编程(1)_第44张图片
在这里插入图片描述
运行结果和我们想象的不一样!!!
239-shell脚本编程(1)_第45张图片
239-shell脚本编程(1)_第46张图片

怎么改?
239-shell脚本编程(1)_第47张图片
239-shell脚本编程(1)_第48张图片
239-shell脚本编程(1)_第49张图片
239-shell脚本编程(1)_第50张图片
加个双引号也没事!
239-shell脚本编程(1)_第51张图片
239-shell脚本编程(1)_第52张图片
但是这样就 错了
239-shell脚本编程(1)_第53张图片
在这里插入图片描述
但是对变量双引号就没事
下面这种方法也可以
239-shell脚本编程(1)_第54张图片
239-shell脚本编程(1)_第55张图片

i++的操作

239-shell脚本编程(1)_第56张图片
239-shell脚本编程(1)_第57张图片
在这里插入图片描述
下面这个写法也可以
239-shell脚本编程(1)_第58张图片
但是 a+1就是错误的

239-shell脚本编程(1)_第59张图片

while循环

239-shell脚本编程(1)_第60张图片

239-shell脚本编程(1)_第61张图片
239-shell脚本编程(1)_第62张图片

死循环的写法

239-shell脚本编程(1)_第63张图片
239-shell脚本编程(1)_第64张图片
239-shell脚本编程(1)_第65张图片
239-shell脚本编程(1)_第66张图片
239-shell脚本编程(1)_第67张图片
示例:
239-shell脚本编程(1)_第68张图片
239-shell脚本编程(1)_第69张图片

从键盘输入密码(只能输3次)

239-shell脚本编程(1)_第70张图片
239-shell脚本编程(1)_第71张图片
239-shell脚本编程(1)_第72张图片

until循环

条件为假 进入循环
239-shell脚本编程(1)_第73张图片
239-shell脚本编程(1)_第74张图片
239-shell脚本编程(1)_第75张图片
239-shell脚本编程(1)_第76张图片
239-shell脚本编程(1)_第77张图片

函数

239-shell脚本编程(1)_第78张图片
239-shell脚本编程(1)_第79张图片

没有主函数,即使有mian,也是和其他函数同等地位。
239-shell脚本编程(1)_第80张图片
第15行执行。

函数的变量

在这里插入图片描述
239-shell脚本编程(1)_第81张图片

函数的返回

下面这种写法是错误的
239-shell脚本编程(1)_第82张图片
正确的写法如下:
$?代表获取上一行代码的执行结果
239-shell脚本编程(1)_第83张图片
239-shell脚本编程(1)_第84张图片

这里要用变量去接收$ ?,因为$?会一直变,接收上一行代码的结果。
在这里插入图片描述
239-shell脚本编程(1)_第85张图片
这种写法只适合当下,后面再用就不行了

脚本的特点

239-shell脚本编程(1)_第86张图片
239-shell脚本编程(1)_第87张图片
我们每次定义变量,谁在执行,bash在执行,变量在解释器里,除非移除
239-shell脚本编程(1)_第88张图片
虽然你是函数,但是你告诉解释器你定义了一个变量,初始化,bash解释器帮你定义一个变量,执行完,这个变量还在的!!!在函数体内外都可以访问
unset是移除
239-shell脚本编程(1)_第89张图片
239-shell脚本编程(1)_第90张图片
加上local,代表这个变量只在这个函数里用一下
239-shell脚本编程(1)_第91张图片
239-shell脚本编程(1)_第92张图片
239-shell脚本编程(1)_第93张图片

local后return还是可以拿到

239-shell脚本编程(1)_第94张图片
在这里插入图片描述

你可能感兴趣的:(Linux系统的学习,编程语言,linux)