【问题标题】:Short Form of Bash Script IF ELSE Not Working如果 ELSE 不工作,Bash 脚本的简写形式
【发布时间】:2022-10-17 09:16:24
【问题描述】:

该脚本基本上是为 jpg 文件轮询目录 /images 并将它们移动到新目录 /gallery/2022-06-14/ 同时还重命名(删除初始字符)。我计划添加另一个动作,如果现有时间在 000000 和 050000 之间,bash 脚本应该通过将renamed file path 作为参数来调用 python 脚本。

你能告诉它是否不能以这种方式使用if 的缩写形式吗?为什么它会出错?

find '/images' -maxdepth 1 -name '*jpg' -exec sh -c '''echo mv {} /gallery/$(date --date="today" '+%F')/$(basename {} | sed "s/^.\{,19\}//") && [[ ! ( `date +"%H%M%S"` < 000000 || `date +"%H%M%S"` > 050000 ) ]] && python3 python-script.py "/gallery/$(date --date="today" '+%F')/$(basename {} | sed "s/^.\{,19\}//")"''' \;
sh: 1: Syntax error: "(" unexpected
sh: 1: Syntax error: "(" unexpected
sh: 1: Syntax error: "(" unexpected
sh: 1: Syntax error: "(" unexpected
sh: 1: Syntax error: "(" unexpected
sh: 1: Syntax error: "(" unexpected
sh: 1: Syntax error: "(" unexpected
sh: 1: Syntax error: "(" unexpected
sh: 1: Syntax error: "(" unexpected

【问题讨论】:

  • 当问题是关于bash 时,为什么要使用python 标签?已移除。
  • 您使用的是sh,但[[ 是特定于bash 的。将命令 sh 更改为 bash 可能会对此有所帮助。
  • 顺便说一句,三引号 (''') 在 shell 语法中不是一个东西。 shell 会将其解析为一个长度为零的带引号的字符串 (''),后跟一个普通的单引号 (')。

标签: bash


【解决方案1】:

如果不能以这种方式使用 if 的缩写形式?

有可能的。

为什么它会出错?

那个特定的错误很可能是因为您使用 sh 而不是 bash。 [[ 对具有特殊语法规则的 Bash 来说非常特别,它专门处理 (

无论如何,代码是不可读的,并且使用find 扩展名,并且不受文件名中的空格的保护并且存在问题。不要使用反引号,首选$(...)。考虑一种不同的方法,您不必对所有内容都进行超级双引号:

work() {
  echo "$somevar"
  somevar2="$2"
  # normal code here, you could use variables.
  echo mv "$1" "/gallery/$(date --date="today" '+%F')/$(basename "$1" | sed "s/^.{,19}//")"
  if [[ ! ( $(date +"%H%M%S") < 000000 || $(date +"%H%M%S") > 050000 ) ]]; then
     python3 python-script.py "/gallery/$(date --date="today" '+%F')/$(basename "$1" | sed "s/^.{,19}//")"
  fi
}
somevar=1
export somevar
export -f work
somevar2=2
find .... -exec bash -c 'work "$@"' _ {} "$somevar2" ;

【讨论】:

  • 我也试图在 work() 中传递总图像文件的计数,或者换句话说,如果 find 中的总数组长度超过 5,我不想运行 python 代码
  • ?然后通过它。我不明白。您可以使用参数,或导出变量。
猜你喜欢
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 2014-03-18
  • 1970-01-01
相关资源
最近更新 更多