Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays bash从参数中填充整数数组并对其排序_Arrays_Bash_Sorting - Fatal编程技术网

Arrays bash从参数中填充整数数组并对其排序

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[$

我看了每个人,但我被这个代码卡住了

例如: 用户调用./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[$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
说明:

  • (IFS=$'\n';echo“$*”

    这将导致打印命令行参数,每行一个。这是在子shell中,因此对
    IFS
    的赋值不会影响脚本的其余部分

  • sort-n

    -n
    告诉
    排序
    应用数字排序


我知道您正在进行课堂作业或类似作业,并且在如何解决问题方面受到限制。对于那些不受限制的用户,下面是一个使用标准unix工具的简单解决方案:

#!/bin/bash
( IFS=$'\n'; echo "$*" ) | sort -n
示例用法:

$ script.sh 3 5 6 2 1
1
2
3
5
6
说明:

  • (IFS=$'\n';echo“$*”

    这将导致打印命令行参数,每行一个。这是在子shell中,因此对
    IFS
    的赋值不会影响脚本的其余部分

  • sort-n

    -n
    告诉
    排序
    应用数字排序


运行脚本;您的大多数问题都是简单的语法错误。我强烈建议您修复错误:这将有助于您作为程序员的发展。我还敦促你不要重新发明轮子:
printf”%s\n“$@”sort-n
就足够了。切普纳非常感谢你的网站,当@JohnBollinger为我指路时,我几乎纠正了代码。对于格伦尼查克曼,我知道的没错,但这是一个非常老的学校老师布置的作业,再次感谢大家把你们的剧本看完;您的大多数问题都是简单的语法错误。我强烈建议您修复错误:这将有助于您作为程序员的发展。我还敦促你不要重新发明轮子:
printf”%s\n“$@”sort-n
就足够了。切普纳非常感谢你的网站,当@JohnBollinger为我指路时,我几乎纠正了代码。对于GlennJackman,我知道,但这是一个非常老的学校老师布置的作业,再次感谢大家非常感谢,我是一个初学者,我习惯用c编写代码,所以bash对我来说真的很新,很抱歉浪费了你们的时间,但我真的很期待