使用现有的Shell脚本并尝试了解
到底是在做什么。
前7行已提取出来,但是当我运行测试时,它失败并显示“错误数字”错误。
这是脚本中的代码。
select count(order_id) from orders
left join(
select count(*) from bundles_products as bundle_amount,
sum(case when orders_products in (
select names from bundles_products where bundle_id='1') then 1 else 0) as order_total,
orders.order_id
left join product on bundle_products.product_id = products.product_id
left join orders on products.product_id = orders_products.product_id
where bundle_products.bundle_id ='1'
) as my_table
on orders.order_name = my_table.orders
where my_table.bundle_amount = my_table.order_total
这是第一次测试。
#! /bin/ksh
echo $2
DUMMY_INPUT=$2
set -- $DUMMY_INPUT
shift
VAR1=$1;shift;shift
echo $VAR1
根据该错误,仅使用数字进行了另一项测试,但出现了相同的错误。
> ./runThis.sh arg1 arg2 arg3 arg4 arg5
arg2
./runThis.sh[6]: shift: (null): bad number
作为测试,已注释掉“ set-”命令,该命令现在可以使用。
> ./runThis.sh 1 2 3 4 5 6 7
2
./runThis.sh[6]: shift: (null): bad number
#! /bin/ksh
echo $2
DUMMY_INPUT=$2
#set -- $DUMMY_INPUT <-----Comment out this line
shift
VAR1=$1;shift;shift
echo $VAR1
> ./runThis.sh arg1 arg2 arg3 arg4 arg5
arg2
arg2
“ set”命令的执行是否错误?
知道为什么它会失败吗?
++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++
阅读回复后,我有了更好的理解。...
> ./runThis.sh 1 2 3 4 5 6 7
2
2
如果我正确遵循,则“ set”命令会将输入参数设置为DUMMY_INPUT的内容,该内容在原始代码中仅设置为单个值。
此代码更改将其设置为整个参数字符串。
答案 0 :(得分:3)
在shift
中调用ksh
却未定义位置参数时,会出现错误消息
ksh: shift: (null): bad number
例如:
> set -- a b
> echo $1
a
> shift
> echo $1
b
> shift
> echo $1
> shift
ksh: shift: (null): bad number