在外壳程序脚本中使用“ set-”会导致“错误编号”

时间:2019-06-28 11:22:22

标签: shell ksh

使用现有的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的内容,该内容在原始代码中仅设置为单个值。
此代码更改将其设置为整个参数字符串。

1 个答案:

答案 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