这是我的脚本代码,用于查找用户何时输入 n 个数字来查找数字是奇数还是偶数,但我猜我的数组不起作用
#!/bin/sh
echo "Enter the value of n:"
read n
e=0
o=0
while [ $n -gt 0 ]
do
echo "Enter the number:"
read a
t=`expr $a % 2`
if [ $t -eq 0 ]
then
even[e]=$a
e=`expr $e + 1`
else
odd[o]=$a
o=`expr $o + 1`
fi
n=`expr $n - 1`
done
echo "The even numbers are ${even[*]}"
echo "The odd numbers are ${odd[*]}"
exit 0
我收到类似错误
test.sh: 15: test.sh: odd[o]=1: not found
test.sh: 12: test.sh: even[e]=2: not found
test.sh: 20: test.sh: Bad substitution
错误在哪里以及为什么会发生?
答案1
您正在运行的脚本/bin/sh
根本不支持数组。bash
另一方面,外壳有 。
您还使用了一些有些过时的构造,例如expr
进行算术。
这是为以下内容编写的脚本版本bash
:
#!/bin/bash
read -p 'Enter n: ' n
while (( n > 0 ))
do
read -p 'Enter number: ' a
if (( a % 2 == 0 ))
then
even+=( "$a" )
else
odd+=( "$a" )
fi
n=$(( n - 1 ))
done
echo "The even numbers are ${even[*]}"
echo "The odd numbers are ${odd[*]}"
主要更改包括修复#!
指向 的行bash
、用于(( ... ))
算术评估、$(( ... ))
算术替换、read -p
向用户提供提示、+=(...)
向数组添加元素以及删除不需要的变量。
该脚本的非交互式版本,从命令行获取数字:
#!/bin/bash
for number do
if (( number % 2 == 0 )); then
even+=( "$number" )
else
odd+=( "$number" )
fi
done
printf 'The even numbers: %s\n' "${even[*]}"
printf 'The odd numbers: %s\n' "${odd[*]}"
测试:
$ bash script.sh 1 2 3 4
The even numbers: 2 4
The odd numbers: 1 3