将$1与bash中的另一个字符串进行比较
我花了两个小时写了一个将$1与bash中的另一个字符串进行比较,bash,shell,if-statement,Bash,Shell,If Statement,我花了两个小时写了一个if语句,它从来都不是我想要的: #should return true if [ "$1" == "355258054414904" ]; then 以下是整个脚本: #!/bin/bash param=$1 INPUT=simu_900_imei_user_pass.csv OLDIFS=$IFS IFS=, [ ! -f $INPUT ] && { echo "$INPUT ime not found"; exit 99; } while rea
if
语句,它从来都不是我想要的:
#should return true
if [ "$1" == "355258054414904" ]; then
以下是整个脚本:
#!/bin/bash
param=$1
INPUT=simu_900_imei_user_pass.csv
OLDIFS=$IFS
IFS=,
[ ! -f $INPUT ] && { echo "$INPUT ime not found"; exit 99; }
while read imei email pass
do
echo "First Parameter-IMEI: $1"
if [ "$1" == "355258054414904" ]; then
echo "GOOD"
fi
done < $INPUT
IFS=$OLDIFS
我已经看过很多关于这个主题的页面,但我无法让它工作:(
编辑:我加入csv的内容,以便更好地理解!谢谢你的帮助
4790057be1803096,user1,pass1
355258054414904,juju,capp
4790057be1803096,user2,pass2
358854053154579,user3,pass3
$1不匹配的原因是因为$1表示命令行上给定给脚本的第一个参数,而您希望它与从文件读取的第一个字段匹配。该值以$imei为单位 你可能是说:
if [ "$imei" == "355258054414904" ]; then
echo "GOOD"
fi
因为它在循环中,您可以逐行读取输入文件
要检查$1
的内容,请使用:
cat -vet <<< "$1"
然后在脚本的其余部分使用
“$param”
。测试字符串是否与[您想使用一个'='符号。您如何运行脚本?什么是cat-v我猜$1
中有一些尾随空格。响应“第一个参数IMEI:'1'”的是什么
display?对于每一行,我都得到了GOOD
,因此是的,隐藏字符是一个不错的选择。而且,=
在POSIX测试中无效,即使某些shell(例如bash)允许它。字符串比较运算符的正确拼写是=
——只有一个字符。如果使用bash,printf'%q\n'$1“
是另一种查看实际情况的方法。可能是这样。但是为什么现有程序不打印三次好的?因为$1
不等于3552580544904
这正是问题所在!为什么的“$1”
不等于“35525544904”
?因为它看起来确实像是从打印输出中得到的。@JuliatzindelToro:你能显示cat-vet的输出吗?是的,你在$1
中有\r
。你需要使用[[“$1”==“$imei”*]
条件。对于POSIX一致性,是的。不过,Bash将=
视为与=
相同。
cat -vet <<< "$1"
param=$(tr -d '\r' <<< "$1")