将$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")