239-shell脚本编程(1)

为什么用shell脚本编程?

在这里插入图片描述

helloword示例

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

在这里插入图片描述
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虚拟机,把底层硬件,操作系统与用户层面代码隔离开,可以把热点代码转换为本地代码,但是这就无法跨平台了。
在这里插入图片描述

变量

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

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

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

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

在这里插入图片描述
脚本中的一个变量可以表示很多类型
在这里插入图片描述
环境变量(从父进程继承来的,我们没有定义但是可以使用)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
$0:脚本的名字
$#:脚本的参数个数
$$ :脚本的pid,实际上就是解释器的pid。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
参数变量
$ 1就是第一个变量,$ 2就是第二个变量, $ 9 就是第九个变量,只能传9个参数。用$ *传全部参数。
\是转义的作用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

条件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

if写法1:
在这里插入图片描述
在这里插入图片描述
if写法2:
在这里插入图片描述
在这里插入图片描述
加上双引号,防止空值
在这里插入图片描述
在这里插入图片描述
判空操作
在这里插入图片描述
在这里插入图片描述

if else

在这里插入图片描述
在这里插入图片描述

else if

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

for循环

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一般情况下,for后面给个命令
在这里插入图片描述
在这里插入图片描述
运行结果和我们想象的不一样!!!
在这里插入图片描述
在这里插入图片描述

怎么改?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
加个双引号也没事!
在这里插入图片描述
在这里插入图片描述
但是这样就 错了
在这里插入图片描述
在这里插入图片描述
但是对变量双引号就没事
下面这种方法也可以
在这里插入图片描述
在这里插入图片描述

i++的操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面这个写法也可以
在这里插入图片描述
但是 a+1就是错误的

在这里插入图片描述

while循环

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

死循环的写法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
示例:
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

until循环

条件为假 进入循环
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

函数

在这里插入图片描述
在这里插入图片描述

没有主函数,即使有mian,也是和其他函数同等地位。
在这里插入图片描述
第15行执行。

函数的变量

在这里插入图片描述
在这里插入图片描述

函数的返回

下面这种写法是错误的
在这里插入图片描述
正确的写法如下:
$?代表获取上一行代码的执行结果
在这里插入图片描述
在这里插入图片描述

这里要用变量去接收$ ?,因为$?会一直变,接收上一行代码的结果。
在这里插入图片描述
在这里插入图片描述
这种写法只适合当下,后面再用就不行了

脚本的特点

在这里插入图片描述
在这里插入图片描述
我们每次定义变量,谁在执行,bash在执行,变量在解释器里,除非移除
在这里插入图片描述
虽然你是函数,但是你告诉解释器你定义了一个变量,初始化,bash解释器帮你定义一个变量,执行完,这个变量还在的!!!在函数体内外都可以访问
unset是移除
在这里插入图片描述
在这里插入图片描述
加上local,代表这个变量只在这个函数里用一下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

local后return还是可以拿到

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LINZEYU666/article/details/115101723
今日推荐