0

如何使用脚本传递空字符串。作为 agqmi 开始 0""""""。如果它无法在配置文件中找到设置。并且应用程序不是通过脚本调用的。但通过命令行它的工作(agqmi start 0“”“”“”)。

profile_file

APN='airtelgprs.com'

USR='username'

PASS='password'

PAPCHAP='2'



if [ -f "$PROFILE_FILE" ]; then                                       

 echo "Loading profile..." >>$LOG                                

PAPCHAP=`cat agqmi-network.conf | grep 'PAPCHAP' | awk '{print $1}' | cut -f2 

-d"'"`                                                                                           
APN=`cat agqmi-network.conf | grep 'APN' | awk '{print $1}' | cut -f2 -d"'"`

USR=`cat agqmi-network.conf | grep 'USR' | awk '{print $1}' | cut -f2 -d"'"`

PASS=`cat agqmi-network.conf | grep 'PASS' | awk '{print $1}' | cut -f2 -d"'"`


if [ "x$PAPCHAP" == "x" ]; then
PAPCHAP="0"
fi

if [ "x$APN" == "x" ]; then
APN="\"\""
fi

if [ "x$USR" == "x" ]; then
USR="\"\"" 
fi

if [ "x$PASS" == "x" ]; then
PASS="\"\""                                                                                     
fi                                                                                                      

fi

我试图执行

    STATUS_CMD="./agqmi start "$PAPCHAP" "$APN" "$USR" "$PASS""    
    echo "$STATUS_CMD" >>$LOG                                                      
    `$STATUS_CMD`
4

2 回答 2

1

以您首先存储命令的方式运行命令的方法是通过以下方式(使用数组):

STATUS_CMD=(./agqmi start "$PAPCHAP" "$APN" "$USR" "$PASS")
echo "${STATUS_CMD[*]}" >>$LOG
"${STATUS_CMD[@]}"

您也可以使用eval,但它可能会根据变量的值误解它。

而且您可能不再需要将原本为空的变量重新分配给""(文字)。只有一个需要转换为0

if [ "x$PAPCHAP" == "x" ]; then
    PAPCHAP="0"
fi
#if [ "x$APN" == "x" ]; then
#    APN="\"\""
#fi
#if [ "x$USR" == "x" ]; then
#    USR="\"\""
#fi
#if [ "x$PASS" == "x" ]; then
#    PASS="\"\""
#fi

而且您的比较不需要像x. [[ ]]也推荐使用。

if [[ $PAPCHAP == '' ]]; then  ## Or simply [[ -z $PAPCHAP ]]
    PAPCHAP=0
fi

POSIX 更新:

if [ -z "$PAPCHAP" ]; then
    PAPCHAP=0
fi
#if [ -z "$APN" ]; then
#    APN=''
#fi
#if [ -z "$USR" ]; then
#    USR=''
#fi
#if [ -z "$PASS" ]; then
#    PASS=''
#fi

STATUS_CMD="./agqmi start \"$PAPCHAP\" \"$APN\" \"$USR\" \"$PASS\""
echo "$STATUS_CMD" >>"$LOG"
./agqmi start "$PAPCHAP" "$APN" "$USR" "$PASS"  ## Just execute it directly and not inside a variable.

也许你不应该添加./

STATUS_CMD="agqmi start \"$PAPCHAP\" \"$APN\" \"$USR\" \"$PASS\""
echo "$STATUS_CMD" >>"$LOG"
agqmi start "$PAPCHAP" "$APN" "$USR" "$PASS"

无论如何,您实际上不需要将其存储在变量中:

echo "agqmi start \"$PAPCHAP\" \"$APN\" \"$USR\" \"$PASS\"" >>"$LOG"
agqmi start "$PAPCHAP" "$APN" "$USR" "$PASS"
于 2013-09-09T09:56:42.250 回答
0

您是否尝试将“\0”作为参数传递?

我有一个 solaris 服务器,每当我需要传递 NULL 字符串作为参数时,我都会使用“\0”。

你的命令看起来像

agqmi start 0 "\0" "\0" "\0"

请让我知道它是否适合您。

于 2013-09-09T13:07:28.983 回答