我需要检查shell脚本中使用的RAM百分比。但我想使用“set -e”,这让我成为一个问题。
有两个版本的免费实用程序,输出略有不同。为了在输出上使用awk,我通过greting输出只出现在其中一个字符串中的字符串“buffers”来检查free命令中的哪一个。如果没有这样的字符串,则命令的退出状态= 1,由于set -e参数而导致我的脚本无法执行。
我尝试在grep命令之后添加“|| true”,但这总是设置退出代码= 0,使我的grep测试无用。
set -e
free -m | grep 'buffers' &> /dev/null || true
if [ $? == 0 ]; then
MEMORY=$(free -m | awk 'NR==3{printf "%.0f%%", $3*100/($3+$4)}')
else
MEMORY=$(free -m | awk 'NR==2{printf "%.0f%%", ($2-$7)*100/$2}')
fi
echo $MEMORY
那么如何在不关闭set -e参数的情况下正确地做到这一点?此外,还提出了任何更好的想法,以便将使用的RAM百分比变为变量。
答案 0 :(得分:3)
如果将set -e
移动到if
,您可以避免因if free -m | grep 'buffers' &> /dev/null; then
MEMORY=$(free -m | awk 'NR==3{printf "%.0f%%", $3*100/($3+$4)}')
else
MEMORY=$(free -m | awk 'NR==2{printf "%.0f%%", ($2-$7)*100/$2}')
fi
echo $MEMORY
而导致退出的失败命令:
free -m
此外,free=$(free -m)
if [[ $free =~ buffers ]]; then
MEMORY=$(awk 'NR==3{printf "%.0f%%", $3*100/($3+$4)}' <<< "$free")
else
MEMORY=$(awk 'NR==2{printf "%.0f%%", ($2-$7)*100/$2}' <<< "$free")
fi
echo $MEMORY
执行两次并不是很好。
您可以将其存储在变量中以便重复处理:
import json
data = json.load(open('jsonfile.json'))
clothing_ids = {'List of Clothing IDs': map(lambda x: x['ID'], data)}