#!/bin/bash
for (( x=7; x <= 65; x+=2 ))
do
if [ $x!=57 && $x!=59 && $x!=29 && $x!=53 ]
then
cd charged_$x
cp -f ~aman/user_ana_normal_mode/Testforaman/user_ana.so .
cd ..
fi
done
无法找出问题,请帮忙
答案1
[ $x!=57 && $x!=59 && $x!=29 && $x!=53 ]
[
是一个命令,它遵循与 相同的规则ls
。&&
是一种对命令进行条件分组的 shell 方式。在 中[ foo && bar ]
,shell 运行命令[ foo
,如果成功,则运行bar ]
。该[
命令失败,因为它希望将 a]
作为最后一个参数,因此第二个命令不会运行。
[[ .. ]]
然而,特殊的条件语法确实支持&&
,因此您可以使用[[ $x != 57 && $x != 59 && ... ]]
.请注意,它仍然需要运算符周围有空格。 Plain$x!=57
将用于测试是否$x!=57
为非空字符串,无论 的值如何,它始终都是非空字符串x
。
或者,将结束语]
放在&&
:[ "$x" != 57 ] && [ "$x" != 59 ] && ...
答案2
以下代码应该可以工作:
#!/bin/bash
for (( x=7; x <= 65; x+=2 ))
do
if [ "$x" -ne 57 ] && [ "$x" -ne 59 ] && [ "$x" -ne 29 ] && [ "$x" -ne 53 ]; then
cd charged_$x
cp -f ~aman/user_ana_normal_mode/Testforaman/user_ana.so .
cd ..
fi
done
- 最好针对每种情况使用单独的牙套。
- 我们应该使用
-ne
而不是!=
,因为我们正在比较整数。
答案3
您同时使用太多条件,因此您需要更改其语法。
if [ $x!=57 ] && [ $x!=59 ] && [ $x!=29 ] && [ $x!=53 ]
这会起作用
答案4
您的代码有两个错误:!=
操作员需要在其周围留有空格,并且 应该&&
位于各个[ ... ]
测试之间。
而不是使用大量单独的测试:
for (( x = 7; x <= 65; x += 2 )); do
case $x in
29|53|57|59) ;;
*)
cp -f ~aman/user_ana_normal_mode/Testforaman/user_ana.so "charged_$x"
esac
done
我还去掉了一半没用的cd
。