crontab shell脚本启动另一个脚本:删除char错误

时间:2016-06-23 23:38:55

标签: linux bash shell crontab

我想通过crontab运行一个shell脚本,然后运行另一个shell脚本,该脚本检查某个文件夹中的某些文件并为每个文件创建一个目录。 第一个脚本" my_crontab.sh"看起来像这样:

#!/bin/bash
cd /home/myusername/myfolder
python mypythonscript.py
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/myusername/myfolder
bash start.sh

Crontab执行" my_crontab.sh"和" start.sh"也被调用(我知道来自crontab日志文件)

这就是" start.sh"看起来像:

#!/bin/bash
echo "start.sh started"
if [ $(find -maxdepth 1 -type f | wc -l) -ne 0 ]; 
then
 for i in *.jpg
 do
  folder="${i/.jpg/}"
  mkdir ../folders/$folder
 done
else
 echo "nothing to do"
fi

现在我收到了错误:     /bin/sh: 7: /home/myusername/myfolder/start.sh: Bad substitution

我已经尝试了folder=${ i:0:-4 },但这也无效。 任何想法如何解决它?

2 个答案:

答案 0 :(得分:0)

继续发表评论,导致Bad Substitution start.sh spaces7与您的变量名称之间的braces排在"${ i/.jpg/ }"之间替换,(例如"${i/.jpg/}"应该是4。行-ne是有问题的,因为wc -l期望双方都有整数表达式,并且不能保证命令替换符合(它应该使用start.sh)但不保证。您可以更好地撰写类似于#!/bin/bash echo "start.sh started" declare -i cnt=0; while read -r fname do folder="${fname%.jpg}" mkdir -p "../folders/$folder" ((cnt++)) done < <(find . -maxdepth 1 -type f -name "*.jpg") [ "$cnt" -eq '0' ] && echo "nothing to do" 的内容:

cnt

注意:如果找不到"nothing to do"个文件,计数器.jpg仅用于输出cnt,如果不需要,只需删除引用/etc/mysql/my.cnf的所有行。

答案 1 :(得分:0)

啊,完美啊。非常感谢!

它还有助于使用bash start.sh代替. start.sh

我在我的问题中更新了上面的代码。

相关问题