使用shell脚本实现希尔排序

之前讲过如何用C++实现希尔排序,在此就不赘述了。

链接:插入排序和选择排序算法

今天是利用Shell脚本语言实现希尔排序,在此之前(可直接在底部查看),先简单了解Shell脚本语言。

Shell的作用是解释执行用户的命令,有两种执行方式

交互式(Interactive):用户输入一条指令,Shell就执行一条;

批处理(Batch):用户事先写一个Shell脚本(Script),其中包含多条指令,Shell一次性执行完这些指令而不必一条一条地敲命令。

Shell脚本和编程语⾔言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译,Shell程序提示符下执行。

一.Shell语言特点

弱类型语言:没有类型检查,数据类型被忽略。

解释性语言(非编译型语言):执行过程依赖于解释器,要先将解释器加载到内存,再读取命令进行翻译

了解:

强类型定义语言和弱类型语言

强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。
弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。
另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的
解释型语言和编译型语言
编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。
解释型语言:在运行程序的时候才翻译,专门有一个解释器能够直接执行程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。

二.Shell脚本执行过程

1 创建.sh文件(test.sh)

2 打开.sh文件,在首行指明解释器(#!(Shebang)),如#!/bin/bash

3 加上可执行权限chmod +x test.sh

4 运行文件,./test.sh

三.Shell语法

1.变量

Shell变量由全大写字母加下划线组成

环境变量:环境变量可以从父进程传给子进程,因此Shell进程的环境变量 可以从当Shell进程传给fork出来的子进程。 

本地变量 :只存在于当前Shell进程,用set命令可以显示当前Shell进程中定义的所有变量(包括本地变量和环境变量)和函数。

在Shell中定义或赋值、引用一个变量

注意等号两边都不能有空格,否则会被Shell解释成命令和命令行参数。

2.单引号和双引号

单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外, 但是字符串中不能出现单引号。

双引号用于保持引号内所有字符的字面值(回车也不例外)

使用shell脚本实现希尔排序

3.条件测试

命令test或[可以测试⼀一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1

使用shell脚本实现希尔排序

4.循环语句

1)for/do/done 

2)while/do/done 

5.if/then/elif/else/fi 

if命令的参数组成一条子命令,如果该子命令的Exit Status为0(表示真),则执行then后面的子命令,如果Exit Status非0(表示假),则执行elif、else或者fi后面的子命令。if后面的子命令通常是测试命令,但也可以是其它命令。

使用shell脚本实现希尔排序

6.函数

Shell中也有函数的概念,但是函数定义中没有返回值也没有参数列表,Shell脚本中的函数必须先定义后调用。Shell函数没有参数列表并不表示不能传参数,事实上,函数就像是迷你脚本,调用函数时可以传任意个参数,在函数内同样是用$0、$1、$2等变量来提取参数,函数中的位置参数相当于函数的局部变量,改变这些变量并不会影响函数外面地$0、$1、$2等变量。函数中可以⽤用return命令返回,如 果return后面跟一个数字则表示函数的Exit Status。

使用shell脚本实现希尔排序

7.数组

在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为: array_name=(value1 ... valuen) 

读取数组元素值的一般格式是:${array_name[index]} 

使用@ 或 * 可以获取数组中的所有元素:${array_name[*]}

获取数组长度的方法与获取字符串长度的方法相同:${#array_name[@]}

使用shell脚本实现希尔排序

四、希尔排序

只是利用基本的Shell语法进行编写代码,有兴趣的可以尝试借助工具来写

使用shell脚本实现希尔排序

使用shell脚本实现希尔排序

在命令行上输入数组

使用shell脚本实现希尔排序