外壳条件错误输出 - 无法识别 Bash 语法



我有一个小的shell脚本,似乎无法弄清楚如何创建一个简单的条件语句。

big_width=$(($width > 1700))
big_height=$(($height > 1700))
if [ $extension != "jpg" || $big_width || $big_height ]; then

给出错误

[: missing ]
0: not found

还有IDK,如果这会给我我想要的东西。如果$extension != "jpg或其中一个宽度/高度变量大于 1700,则应执行分生孢子。

编辑

尝试此代码if [[ $extension != "jpg" ]] || ((width > 1700)) || ((height > 1700)); then给出height: not found error。知道为什么 bash 语法出错吗?

编辑

当我将其添加到我的脚本中时

echo $0
echo $SHELL

它打印

source/images/shrink_img.sh
/bin/bash

所以 bash 应该有效吗?我不知道为什么这个条件语法会破坏事情。我尝试将文件扩展名从 .sh 更改为 .bash,并使用 bash 而不是sh调用脚本。

在 C 中,您可以在需要布尔表达式的位置放置裸01。在 shell 脚本中并非如此。也不能在单个方括号内使用&&||。他们需要在外面。

选项 1:显式编写所有三个测试。

if [[ $extension != "jpg" ]] || ((width > 1700)) || ((height > 1700)); then

选项 2:使用"布尔"变量。

((big_width  = width  > 1700))
((big_height = height > 1700))
if [[ $extension != "jpg" ]] || ((big_width)) || ((big_height)); then    

选项 3:将测试隐藏在函数后面。

big_width () { ((width  > 1700)); }
big_height() { ((height > 1700)); }
if [[ $extension != "jpg" ]] || big_width || big_height; then

(你会注意到我切换到了双方括号。 [[ ... ]][ ... ]更强大。有关双括号优点的深入解释,请参阅此答案。

如果我正确理解了这个问题,这段代码就可以了。如果您想更改条件,也可以玩一玩。

    width=1701
    height=1699
    extension="jpg"
    if [ $extension != "jpg" ] || [ $width -gt 1700 ] || [ $height -gt 1700 ]; 
    then
        echo "Yay"
    else
        echo "Nay"
    fi

or运算符是-o,需要使用比较-eq 0

big_width=$(($width > 1700))
big_height=$(($height > 1700))
if [ $extension != "jpg"  -o  $big_width -eq 0  -o  $big_height -eq 0 ]; then

最新更新