我有一个脚本,我给它的参数。第一个参数是字符串,其他参数是数字。我想检查从第二个和然后的参数是否为数字(字符串除外)。
k="$1"
shift
declare -i x
x=($*)
for i in ${x[@]}
do
if [ $i == 0 ]
then
echo "give dec or incr and numbers only"
exit 1
fi
done
,但它不起作用。它接受所有的参数。Declare -i x表示x只接受数字,如果不接受则返回0。我想让x数组从第二个参数开始
修改后的脚本
- 将其余命令行项捕获到数组中;
- 报告数组大小;和
- 报告分配给单个数组的值元素
脚本如下:
#!/bin/bash
k="$1"
shift
declare -i x
# Assigning values from command line
x=( "$@" ) ### edited assignment command
echo "Assigned array items: ${x[@]}"
size=${#x[*]}
echo "Array size = ${size}"
i=0
max=$((${size}-1))
while [ $i -le ${max} ]
do
echo "x[$i] = ${x[$(expr $i )]}"
((i+=1))
done
注意没有必要在输入数据为已知类型的脚本中使用declare(即输入的位置2-6)。大多数程序以预定义的已知格式处理数据。即使不使用输入,它们通常也会检查"空值"。条件。
"declare"仅用于
- 输入类型为未知类型,AND
- 无效类型的后果将在使用无效数据来包含操作路径(例如rm -rf ${variable})方面产生严重影响,或者将导致操作/损坏不正确的分区(例如在使用fsck或parted修改/修复的半自动过程中${partition} == 0)。