我正在尝试使用shell脚本检查数据库中的重复记录。 为此,我创建了一个名为" check()"的函数。回声的真或假,存储在变量"结果"中。但是在使用if语句进行评估时,它总是返回" True"。
#redundancy check function
check() {
temp=$(grep -w -c "$1" database.dat)
echo $temp
if [ "$temp" != 0 ]
then
echo True
else
echo False
fi
}
insert() {
option="y"
while [ "$option" == "y" ]
do
echo "Rollno: \c"
read roll
result="$(check $roll)"
echo $result
if [ "$result" == "False" ]
then
echo Do something
else
echo "ERROR: Duplicate record found...\nEXITING...\n"
option="n"
fi
done
}
答案 0 :(得分:1)
如果您使用的shell不支持==
test
扩展名,那么您的测试将始终无条件地因语法无效而失败。使用=
进行字符串比较可以移植到所有符合POSIX的实现。
此外,根本没有必要存储然后比较grep
的输出:当你唯一的目标是检查匹配数时,请使用grep -q
的退出状态是零或多于零;这允许grep
在看到匹配时立即退出,而不是需要读取文件的其余部分。
# with -q, this emits no stdout, but exits w/ status 0 (matches exist) or 1 (otherwise)
check() { grep -q -w -e "$1" database.dat; }
insert() {
option=y
while [ "$option" = y ]; do
printf '%b\n' "Rollno: \c"
read -r roll
if check "$roll"; then
printf "ERROR: Duplicate record found...\nEXITING...\n"
option=n
else
echo "Check failed; do something"
fi
done
}