简单 Bash 脚本不工作
Simple Bash Script Not Working
我遇到了 shell 脚本的问题 我正在处理它,但由于某种原因没有按预期工作。下面是大部分脚本以及出错的地方:
for username in $list
do
sleep $sleep
VAL=`curl -H 'Client-ID: $clientid' -s $host$username | jq -r .message | grep -E "unavailable|not found"`
if [[ $VAL == *"not found"* ]]; then
echo "$username is available"
echo "$username" >> available.names
else
echo -e "$username is reserved"
fi
done
我知道有一些变量,例如 sleep
、host
、clientid
和 username
但为了让您了解我正在处理的内容,curl 命令 运行 在 VAL
行(减去 grep)的结果将是这样的:
User "username" was not found
or
User "username" is unavailable
因此,包括到 grep -E
的管道,VAL
的结果将类似于:
not found
现在根据这个 Whosebug answer,我应该可以使用通配符,这样在使用我的脚本时,如果 VAL
包含 "not found" 那么它应该回显用户名是可用的。正如我在这里所做的:
[[ $VAL == *"not found"* ]]
然而,它所做的是 else
对所有正在检查的用户名的声明。所以即使 VAL
包含 "not found",它仍然回显用户名已被占用。
有没有人发现我的脚本有什么问题会导致这种情况发生?我已经查看了大约 100 次,没有发现任何错误可以帮助排除故障,只是它没有按预期工作。任何帮助将不胜感激。
-H 'Client-ID: $clientid'
中的单引号明显错误,
因为 $clientid
的值不是那样扩展的。
请改用双引号。
顺便说一句,你不需要 [[ $VAL == *"not found"* ]]
,
您可以直接使用管道的 grep
的退出代码编写条件:
for username in $list
do
sleep $sleep
if curl -H "Client-ID: $clientid" -s "$host$username" | jq -r .message | grep -qE "unavailable|not found"; then
echo "$username is available"
echo "$username" >> available.names
else
echo "$username is reserved"
fi
done
正如@CharlesDuffy 在评论中指出的那样,echo -e
没有任何意义,所以我也将其删除。
他还指出了写作 for username in $list
中的代码味道,
而不是使用适当的数组。 (list=( allison bob charlie ); for username in "${list[@]}"; do ...
)
我遇到了 shell 脚本的问题 我正在处理它,但由于某种原因没有按预期工作。下面是大部分脚本以及出错的地方:
for username in $list
do
sleep $sleep
VAL=`curl -H 'Client-ID: $clientid' -s $host$username | jq -r .message | grep -E "unavailable|not found"`
if [[ $VAL == *"not found"* ]]; then
echo "$username is available"
echo "$username" >> available.names
else
echo -e "$username is reserved"
fi
done
我知道有一些变量,例如 sleep
、host
、clientid
和 username
但为了让您了解我正在处理的内容,curl 命令 运行 在 VAL
行(减去 grep)的结果将是这样的:
User "username" was not found
or
User "username" is unavailable
因此,包括到 grep -E
的管道,VAL
的结果将类似于:
not found
现在根据这个 Whosebug answer,我应该可以使用通配符,这样在使用我的脚本时,如果 VAL
包含 "not found" 那么它应该回显用户名是可用的。正如我在这里所做的:
[[ $VAL == *"not found"* ]]
然而,它所做的是 else
对所有正在检查的用户名的声明。所以即使 VAL
包含 "not found",它仍然回显用户名已被占用。
有没有人发现我的脚本有什么问题会导致这种情况发生?我已经查看了大约 100 次,没有发现任何错误可以帮助排除故障,只是它没有按预期工作。任何帮助将不胜感激。
-H 'Client-ID: $clientid'
中的单引号明显错误,
因为 $clientid
的值不是那样扩展的。
请改用双引号。
顺便说一句,你不需要 [[ $VAL == *"not found"* ]]
,
您可以直接使用管道的 grep
的退出代码编写条件:
for username in $list
do
sleep $sleep
if curl -H "Client-ID: $clientid" -s "$host$username" | jq -r .message | grep -qE "unavailable|not found"; then
echo "$username is available"
echo "$username" >> available.names
else
echo "$username is reserved"
fi
done
正如@CharlesDuffy 在评论中指出的那样,echo -e
没有任何意义,所以我也将其删除。
他还指出了写作 for username in $list
中的代码味道,
而不是使用适当的数组。 (list=( allison bob charlie ); for username in "${list[@]}"; do ...
)