【问题标题】:Bash script with condition带有条件的 Bash 脚本
【发布时间】:2015-02-23 16:58:33
【问题描述】:

我想为终端创建一个可执行的 Bash 脚本。

根据目录中的文件数量,它应该为图像序列执行 ImageMagick 命令。

这是我的尝试,但在if 条件下我收到了这样的错误

date.sh: line 5: [: missing `]'
date.sh: line 7: [: missing `]'

脚本:

#! /bin/bash
f=$(find . -name "0001_*_L.jpg" | wc -l) 

for i in {1..$f}; do 
     if [ "$f" -lt 10]; then
      fz=000
     elif [ "$f" -lt 100]; then
      fz=00
     else fz=0  
    fi  

    echo $fz $i
    convert *_$fz$i_L.png +append L/$i_L.png
    convert *_$fz$i_R.png +append R/$i_R.png
done

我的语法有什么问题?

【问题讨论】:

  • 您需要在关闭方括号之前添加一个空格]
  • 修复] 的语法后,您的ImageMagick 命令可能仍然无法正常工作.. 但是请提出另一个带有imagemagick 标记的问题:-)
  • 尝试运行这个...printf "%04d %04d %04d" 7 77 777

标签: bash shell for-loop terminal imagemagick


【解决方案1】:

您的代码对于 'if' 条件有这一行:

if [ "$f" -lt 10]; then

你应该把它改成:

#               +--- (extra space here!)
#               |
#               v
if [ "$f" -lt 10 ]; then

使用 'elif' 的另一行也应该发生同样的情况:

elif [ "$f" -lt 100 ]; then

这是if [ ... ]; then 语法的要求:[] 需要有这些额外的空格。

【讨论】:

    【解决方案2】:

    我发现这是一种更好的归零方式...

    #!/bin/bash
    for i in {1..101}; do
       # Calculate a zero-padded $i
       zpi=$(printf "%04d" $i)
       echo $zpi
    done
    

    输出

    0001
    0002
    ...
    0008
    0009
    0010
    0011
    0012
    ...
    0098
    0099
    0100
    0101
    ...
    

    【讨论】:

      【解决方案3】:

      感谢您的回复,这是一种比我认为 %04d 更聪明的方法。有时可能会容易得多

      这是我运行的代码

      #! /bin/bash
      
      f=$(find . -name "0001_*_L.jpg" | wc -l) 
      echo $f
      
      i=1
      while [ "$i" -le "$f" ]; do
      
      fz=$(printf "%04d" $i)
      echo $fz
      
      convert "*_${fz}_L.jpg" +append "L/${fz}_scrL.jpg"
      convert "*_${fz}_R.jpg" +append "R/${fz}_scrR.jpg"
      
      i=$(($i + 1))
      done
      

      【讨论】:

        猜你喜欢
        • 2017-04-17
        • 2018-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-15
        • 2022-06-15
        • 2022-08-23
        相关资源
        最近更新 更多