Shell Bash脚本以升序打印数字

我真的是新的shell Bash脚本。 我需要按照用户input的给定任意数字,按照升序列印数字。

#!/bin/bash declare nos[5]=(4 -1 2 66 10) # Prints the number befor sorting echo "Original Numbers in array:" for (( i = 0; i <= 4; i++ )) do echo ${nos[$i]} done # # Now do the Sorting of numbers # for (( i = 0; i <= 4 ; i++ )) do for (( j = $i; j <= 4; j++ )) do if [ ${nos[$i]} -gt ${nos[$j]} ]; then t=${nos[$i]} nos[$i]=${nos[$j]} nos[$j]=$t fi done done # # Print the sorted number # echo -e "\nSorted Numbers in Ascending Order:" for (( i=0; i <= 4; i++ )) do echo ${nos[$i]} done 

Solutions Collecting From Web of "Shell Bash脚本以升序打印数字"

你可以使用这个脚本:

 #!/bin/bash IFS=' ' read -ra arr -p "Enter numbers: " Enter numbers: 4 -1 2 66 10 sort -n <(printf "%s\n" "${arr[@]}") -1 2 4 10 66 
  • IFS=' '使read所有由空格分隔的数字
  • '读-ra`来读取数组中的所有数字
  • sort -n数字排序数字
  • printf "%s\n" "${arr[@]}"以单独的行打印数组的每个元素
  • <(printf "%s\n" "${arr[@]}")是进程替换,它使printf命令的行为与sort -n命令的文件sort -n

请求用户通过逗号给出输入并解析它,然后填充nos数组。

 echo "Please enter numbers separated by comma: " read string_var IFS=',' read -a nos <<< "$string_var" 

或者在空间上更容易:

 echo "Please enter numbers separated by space: " read string_var nos=($string_var) //now you can access it like array... // now rest of the code .... 

Bashisms,使用bash

如果你

  • 只想使用bash (没有fork和没有外部的二进制文件)
  • 使用小整数(小于2 ^ 60又称:<2305843009213693952)
  • 没有重复的号码

在64位bash下,你可以使用数组索引来存储和排序你的整数:

 read -a array <<<'4 -1 2 66 10' for i in ${array[@]};do sorted[i+(2<<60)]='' done for i in ${!sorted[@]};do echo $[i-(2<<60)] done -1 2 4 10 66 

对于处理重复:

 read -a arr <<<'4 -1 2 66 -12 -10 10 2 24 -10' for i in ${arr[@]};do ((srtd[i+(2<<60)]++)) done for i in ${!srtd[@]};do for ((l=0;l<${srtd[i]};l++));do echo $[i-(2<<60)] done done -12 -10 -10 -1 2 2 4 10 24 66