以下shell脚本有什么问题?我越来越
[: too many arguments
Run Code Online (Sandbox Code Playgroud)
错误
#!/bash
var1=10;
var2=20;
if [ $var1 % 2 -eq 0 ] -a [ $var2 %5 -eq 0 ];
then
#something
fi
Run Code Online (Sandbox Code Playgroud)
首先,该[命令只进行比较。您必须单独执行计算。例如:
var1mod=$((var1 % 2))
if [ $var1mod -eq 0 ]; then
Run Code Online (Sandbox Code Playgroud)
但是,由于您似乎是为 bash 编写脚本,因此您可以使用不同的命令并避免额外的步骤:
if (( var1 % 2 == 0 )); then
Run Code Online (Sandbox Code Playgroud)
其次,您不能将命令与-a. 这仅用作[. 但在它之外,你必须使用&&.
三种不同的变体:
if [ $var1mod -eq 0 -a $var2mod -eq 0 ]; then
if [ $var1mod -eq 0 ] && [ $var2mod -eq 0 ]; then
if (( var1 % 2 == 0 )) && (( var2 % 2 == 0 )); then
if (( var1 % 2 == 0 && var2 % 2 == 0 )); then
Run Code Online (Sandbox Code Playgroud)
永远记住, 的语法if是一个简单的. 这意味着in只是像or之类的命令的名称。if command; then command; fi[if [lsecho