Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用bash向具有多个参数的值添加if-then语句_Bash_If Statement - Fatal编程技术网

如何使用bash向具有多个参数的值添加if-then语句

如何使用bash向具有多个参数的值添加if-then语句,bash,if-statement,Bash,If Statement,我在TMP位置中存储了两个值:{time\u total}和{http\u code} 我想添加一个if-then条件来检查状态。如果它不是100,我希望它打印出一行,说“有点不对劲”。但如果该值等于100,则不显示任何内容 echo getInfo >> $SAVE_TO for i in "${LB[@]}" do TMP=$(curl -X GET -sS -w "%{time_total},%{http_code}\n" -H "UNAME: $

我在TMP位置中存储了两个值:
{time\u total}
{http\u code}

我想添加一个if-then条件来检查状态。如果它不是100,我希望它打印出一行,说“有点不对劲”。但如果该值等于100,则不显示任何内容

echo getInfo  >> $SAVE_TO
for i in "${LB[@]}"
   do
        TMP=$(curl  -X GET -sS -w "%{time_total},%{http_code}\n" -H "UNAME:  
$USER" -H "UPASS: $PWD" -H "Content-Type: application/json"  -d '{"propertytosearch":"systemUserName", "systemUserName":"XXXXXXX"}' https://$i/ws/rest/v2/getInfo -o /dev/null)
        echo ,$i,$TMP >> $SAVE_TO
   done

if [[ $http_code != $200 ]]
then
 echo "something wrong with $i"
fi
TMP输出:

1.207,100
如果我删除
%{time}
并仅使用
%{status}
,则If-then命令有效。我该如何为2个输入值执行此操作

我不一定需要检查
{time}
,但是如果需要,我可以有一个if条件来检查大于4.000的任何时间。它可以有相同的回音“有点不对劲”。您可以像这样单独评估每个“元素”

for element in ${TMP//,/ }
do
  if [ "$element" -ne 100 ]
  then
    echo Something is wrong.
  fi
done

要将
时间
状态
读入两个单独的变量,可以执行以下操作:

IFS=, read -r time status < <(curl  -X GET -sS -w "%{time},%{status}\n" -H)

除了“$100”应该使用“
100”
?@ExplosionPills”之外,删除“”不起作用。顺便说一句,所有大写名称都用于对shell本身和POSIX指定工具有意义的变量名称,而小写名称则保证应用程序使用安全。请参阅“是否将
SAVE_保存到”
,以说明为什么要保留
TMP
?如果您想重建项目,为什么不
echo“,$i,$time,$status”
>脚本中重复的任何内容都是一种代码味道——只要打开一个文件一次,并在您想写另一行时重用打开的句柄,而不是一遍又一遍地打开它,效率就要高得多。我不允许使用字符串拆分,因为它会导致,至少可以对${TMP/,/}中的元素使用bash内置字符串替换:
;do
比旋转子shell、在其中设置管道并在管道内运行外部命令(如
sed
)要高效得多。请参阅或。@hummingbirdtarry,上述代码仅在
read
命令执行期间临时设置
IFS
,以告诉它如何区分一个字段的结束位置和下一个字段的开始位置。我不知道你说的“TMP命令”是什么意思。有关使用
阅读
的讨论,请参阅,解释
IFS
的含义以及
-r
@hummingbirdtarry的重要性……此外,为了更好地理解我们为什么使用
我已经更新了问题中的当前代码。我正在尝试将IFS应用于TMP值,但无法找到在不干扰TMP命令的情况下设置字段分隔符的方法。为什么您不愿意将赋值更改为
TMP
?…您当然可以运行
IFS=,read-r time status
if [[ $status != 100 ]]; then  # note that $status is safe unquoted only in [[ ]], not [ ]
  echo "Something is wrong"
fi