参考教程:https://www.w3cschool.cn/linux/linux-shell.html
https://www.runoob.com/linux/linux-shell.html
感觉都差不多
这里我想了一下,直接上手写代码可能效果会更好。
//插入排序
function insertSort(A) {
var j, temp;
var n = A.length;
for (var i = 1; i < n; i++) {
j = i;
temp = A[i];
while (j > 0 && A[j - 1] > temp) {
A[j] = A[j - 1];
j--;
}
A[j] = temp;
} //end for
return A
}
上面是我曾经写过的插入排序,涉及到的内容有:
- 函数
- 变量
- 数组
- 循环
- 条件语句
- 逻辑运算符
- 算数运算符
感觉能用shell写出来,就对shell理解差不多了。
函数
//插入排序
function insertSort(A) {
return A
}
写出形如上面的shell代码
[root@localhost ~]# cd /root/new
[root@localhost new]# vim insertSort.sh
编辑insertSort.sh,按a键插入代码
#!/bin/bash
#插入排序
function insertSort(){
return $1
}
然后按
esc :wq
退出编辑并保存
赋执行权限
[root@localhost new]# chmod u+x insertSort.sh
然后执行该脚本
我们需要传入一个数组,并打印传出的数组
#!/bin/bash
#插入排序
function insertSort(){
A=$@
echo ${A[@]}
#尝试返回各参数,看是不是数组
echo "第一个参数${A[1]}"
echo "第二个参数${A[2]}"
echo "第三个参数${A[3]}"
return 0
#这个return好像没有什么卵用,只能返回0-255,只能用echo返回了
}
for i in $*
do
A[i]=$i
done
echo "参数个数为:${#A[*]}"
#输出数组个数
insertSort $A
执行脚本,效果如下
[root@localhost new]# ./insertSort.sh 1 2 3
参数个数为:3
1 2 3
第一个参数1
第二个参数2
第三个参数3
[root@localhost new]#
这里使用 ./insertSort.sh执行脚本,后面跟着的1 2 3是三个参数
然后进入脚本内容,首先使用一个循环,将参数赋给数组A
for i in $*
do
A[i]=$i
done
$1就是传入的第一个参数,
$2就是传入的第二个参数,
我暂时没想到如何将所有的参数直接传入数组A,只能写循环
其它参数如下
看到接下来的一行代码
echo "参数个数为:${#A[*]}"
结果
参数个数为:3
for循环中,for i in $*和for i in $@用起来效果一样
可能在别的情况下是不一样的吧
现在能传入数组A了,然后继续修改
最后代码如下
#!/bin/bash
#插入排序
function insertSort(){
A=$@
j=0
temp=0
n=${#A[@]}
echo "数组长度:$n"
for ((i=1;i<$n;i++))
do
j=$i
temp=${A[$i]}
#echo "temp:$temp"
#echo "j:$j"
#echo ${A[$[$j-1]]}
while (( $j>0 && ${A[$[$j-1]]}>$temp ))
do
A[$j]=${A[$[$j-1]]}
j=$[$j-1]
done
A[$j]=$temp
done
echo "排序后的数组为:${A[*]}"
#echo $n
#echo "A[O]:${A[0]}"
#echo "A[1]:${A[1]}"
#echo "A[2]:${A[2]}"
#echo "A[3]:${A[3]}"
return 0
}
k=0
for i in $*
do
#echo "参数为$i"
#echo "数组长度${#A[@]}"
A[$k]=$i
let "k++"
done
echo "未排序的数组为:${A[*]}"
#echo "参数个数为:${#A[*]}"
#输出数组个数
insertSort $A
执行插入排序效果如下:
[root@localhost new]# ./insertSort.sh 5 4 3 2 1
未排序的数组为:5 4 3 2 1
数组长度:5
排序后的数组为:1 2 3 4 5
[root@localhost new]#
说实话,比写C语言还麻烦。