如何使用bash向具有多个参数的值添加if-then语句
我在TMP位置中存储了两个值:如何使用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: $
{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