使用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.单引号和双引号
单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外, 但是字符串中不能出现单引号。
双引号用于保持引号内所有字符的字面值(回车也不例外)
3.条件测试
命令test或[可以测试⼀一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1
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后面的子命令通常是测试命令,但也可以是其它命令。
6.函数
Shell中也有函数的概念,但是函数定义中没有返回值也没有参数列表,Shell脚本中的函数必须先定义后调用。Shell函数没有参数列表并不表示不能传参数,事实上,函数就像是迷你脚本,调用函数时可以传任意个参数,在函数内同样是用$0、$1、$2等变量来提取参数,函数中的位置参数相当于函数的局部变量,改变这些变量并不会影响函数外面地$0、$1、$2等变量。函数中可以⽤用return命令返回,如 果return后面跟一个数字则表示函数的Exit Status。
7.数组
在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为: array_name=(value1 ... valuen)
读取数组元素值的一般格式是:${array_name[index]}
使用@ 或 * 可以获取数组中的所有元素:${array_name[*]}
获取数组长度的方法与获取字符串长度的方法相同:${#array_name[@]}
四、希尔排序
在命令行上输入数组