Arrays bash从参数中填充整数数组并对其排序
我看了每个人,但我被这个代码卡住了 例如: 用户调用./array.sh 3 5 6 2 1 我应该排序(我认为是冒泡排序)并打印排序后的数组Arrays bash从参数中填充整数数组并对其排序,arrays,bash,sorting,Arrays,Bash,Sorting,我看了每个人,但我被这个代码卡住了 例如: 用户调用./array.sh 3 5 6 2 1 我应该排序(我认为是冒泡排序)并打印排序后的数组 #! /bin/bash tab=( $@ ) define -i temp for ((i = ${#tab[*]-1 ; i >= 0 ; i--)) ; do for ((j = 0 ; i - 1; j++)) ; do if [ ${tab[$i]} > ${tab[$
#! /bin/bash
tab=( $@ )
define -i temp
for ((i = ${#tab[*]-1 ; i >= 0 ; i--)) ; do
for ((j = 0 ; i - 1; j++)) ; do
if [ ${tab[$i]} > ${tab[$i+1]} ] then
$temp = ${tab[$i+1]
${tab[$i+1]} = ${tab[$i]}
${$tab[$i]} = $temp
fi
done
echo ${tab[*]} #print the array
但bash对此并不满意,他一直告诉我,我不能像那样评价价值观。
我做错了什么?你能帮我吗?我找了很多地方,但是没有办法找到解决办法
提前感谢各位。您的变量赋值语法完全错误 首先,在分配变量之前,不要放置
$
其次,=
周围不能有空格
因此,它应该是:
temp=${tab[$i+1]}
tab[$i+1]=${tab[$i]}
tab[$i]=$temp
变量赋值语法完全错误 首先,在分配变量之前,不要放置
$
其次,=
周围不能有空格
因此,它应该是:
temp=${tab[$i+1]}
tab[$i+1]=${tab[$i]}
tab[$i]=$temp
不能将值分配给值(例如,
${tab[$i+1]}=${tab[$i]}
);必须指定给名称或数组元素。此外,在bash赋值中,等号(=
)的两边可能都没有空格,除非是在数字上下文中
你还掉了一些大括号
你把“declare”拼错了
在if
条件和then
条件之间需要一个分号或换行符
你没有终止你的内部循环
通过${tab[$i+1]}
引用一个不存在的数组元素
你的内部循环有一个常数作为它的终止条件
和${#tab[*]-1}
错误地尝试在分隔变量引用的大括号内进行数学运算
并且在内部循环中引用了错误的索引变量(一致)
和
是重定向运算符,不大于,除非在数字上下文中
一旦你清除了大量的错误,你最终会
#! /bin/bash
tab=( $@ )
declare -i temp
for ((i = ${#tab[*]} - 1; i > 0 ; i--)) ; do
for ((j = 0 ; $j < $i; j++)) ; do
if [ ${tab[$j]} -gt ${tab[$j+1]} ]; then
temp=${tab[$j+1]}
tab[$j+1]=${tab[$j]}
tab[$j]=$temp
fi
done
done
echo ${tab[*]} #print the array
#/bin/bash
选项卡=($@)
声明-i临时
对于((i=${tab[*]}-1;i>0;i--));做
(j=0;$j<$i;j++);做
如果[${tab[$j]}-gt${tab[$j+1]}];然后
temp=${tab[$j+1]}
tab[$j+1]=${tab[$j]}
选项卡[$j]=$temp
fi
完成
完成
echo${tab[*]}#打印数组
实际上是有效的。您不能将值分配给值(例如,
${tab[$i+1]}=${tab[$i]}
);必须指定给名称或数组元素。此外,在bash赋值中,等号(=
)的两边可能都没有空格,除非是在数字上下文中
你还掉了一些大括号
你把“declare”拼错了
在if
条件和then
条件之间需要一个分号或换行符
你没有终止你的内部循环
通过${tab[$i+1]}
引用一个不存在的数组元素
你的内部循环有一个常数作为它的终止条件
和${#tab[*]-1}
错误地尝试在分隔变量引用的大括号内进行数学运算
并且在内部循环中引用了错误的索引变量(一致)
和
是重定向运算符,不大于,除非在数字上下文中
一旦你清除了大量的错误,你最终会
#! /bin/bash
tab=( $@ )
declare -i temp
for ((i = ${#tab[*]} - 1; i > 0 ; i--)) ; do
for ((j = 0 ; $j < $i; j++)) ; do
if [ ${tab[$j]} -gt ${tab[$j+1]} ]; then
temp=${tab[$j+1]}
tab[$j+1]=${tab[$j]}
tab[$j]=$temp
fi
done
done
echo ${tab[*]} #print the array
#/bin/bash
选项卡=($@)
声明-i临时
对于((i=${tab[*]}-1;i>0;i--));做
(j=0;$j<$i;j++);做
如果[${tab[$j]}-gt${tab[$j+1]}];然后
temp=${tab[$j+1]}
tab[$j+1]=${tab[$j]}
选项卡[$j]=$temp
fi
完成
完成
echo${tab[*]}#打印数组
这实际上是可行的。我知道你正在做一个课堂作业之类的工作,并且在如何解决问题方面受到限制。对于那些不受限制的用户,下面是一个使用标准unix工具的简单解决方案:
#!/bin/bash
( IFS=$'\n'; echo "$*" ) | sort -n
示例用法:
$ script.sh 3 5 6 2 1
1
2
3
5
6
说明:
这将导致打印命令行参数,每行一个。这是在子shell中,因此对(IFS=$'\n';echo“$*”
的赋值不会影响脚本的其余部分IFS
sort-n
告诉-n
应用数字排序排序
#!/bin/bash
( IFS=$'\n'; echo "$*" ) | sort -n
示例用法:
$ script.sh 3 5 6 2 1
1
2
3
5
6
说明:
这将导致打印命令行参数,每行一个。这是在子shell中,因此对(IFS=$'\n';echo“$*”
的赋值不会影响脚本的其余部分IFS
sort-n
告诉-n
应用数字排序排序
printf”%s\n“$@”sort-n
就足够了。切普纳非常感谢你的网站,当@JohnBollinger为我指路时,我几乎纠正了代码。对于格伦尼查克曼,我知道的没错,但这是一个非常老的学校老师布置的作业,再次感谢大家把你们的剧本看完;您的大多数问题都是简单的语法错误。我强烈建议您修复错误:这将有助于您作为程序员的发展。我还敦促你不要重新发明轮子:printf”%s\n“$@”sort-n
就足够了。切普纳非常感谢你的网站,当@JohnBollinger为我指路时,我几乎纠正了代码。对于GlennJackman,我知道,但这是一个非常老的学校老师布置的作业,再次感谢大家非常感谢,我是一个初学者,我习惯用c编写代码,所以bash对我来说真的很新,很抱歉浪费了你们的时间,但我真的很期待