我正在尝试使用从AppleScript按计划运行的bash脚本自动将文件从文件夹自动移动到新文件夹.我试图在Mac OSX上编写一个bash脚本,它一直在失败.简而言之,这就是我所拥有的(我所有echo的用于错误检查):
#!/bin/bash
folder = "ABC"
useracct = 'test'
day = date "+%d"
month = date "+%B"
year = date "+%Y"
folderToBeMoved = "/users/$useracct/Documents/Archive/Primetime.eyetv"
newfoldername = "/Volumes/Media/Network/$folder/$month$day$year"
ECHO "Network is $network" $network
ECHO "day is $day"
ECHO "Month is $month"
ECHO "YEAR is $year"
ECHO "source is $folderToBeMoved"
ECHO "dest is $newfoldername"
mkdir $newfoldername
cp -R $folderToBeMoved $newfoldername
if [-f $newfoldername/Primetime.eyetv];
then rm $folderToBeMoved;
fi
Run Code Online (Sandbox Code Playgroud)
现在我的第一个问题是我根本无法设置变量.即使是文字的,我只是把它等于一些文字.我echo的所有内容都是空白的.我也无法抓住日,月或年,它也是空白的.
我收到一条错误,说找不到-f.
我收到一条错误消息,指出文件意外结束.
我制作了文件并做了一个 chmod u+x scriptname.sh
我不确定为什么一切都没有用.我是OSX上这个bash脚本的新手,只有windows vbscript的经验.任何帮助都会很棒,谢谢!
Isa*_*aac 79
bash脚本中的赋值不能包含空格=,你可能希望用反引号 括起日期命令$():
#!/bin/bash
folder="ABC"
useracct='test'
day=$(date "+%d")
month=$(date "+%B")
year=$(date "+%Y")
folderToBeMoved="/users/$useracct/Documents/Archive/Primetime.eyetv"
newfoldername="/Volumes/Media/Network/$folder/$month$day$year"
ECHO "Network is $network" $network
ECHO "day is $day"
ECHO "Month is $month"
ECHO "YEAR is $year"
ECHO "source is $folderToBeMoved"
ECHO "dest is $newfoldername"
mkdir $newfoldername
cp -R $folderToBeMoved $newfoldername
if [-f $newfoldername/Primetime.eyetv]; then rm $folderToBeMoved; fi
Run Code Online (Sandbox Code Playgroud)
最后三行注释掉了,对我来说这个输出:
Network is
day is 16
Month is March
YEAR is 2010
source is /users/test/Documents/Archive/Primetime.eyetv
dest is /Volumes/Media/Network/ABC/March162010
Run Code Online (Sandbox Code Playgroud)
Ign*_*ams 29
五个问题:
"$(...)"将命令的输出作为文本.[是一个命令.在它和参数之间放一个空格.echo.rm "$folderToBeMoved"folder = "ABC"尝试运行folder以参数=和命名的命令"ABC"。bash中的命令格式为:
command arguments separated with space
Run Code Online (Sandbox Code Playgroud)
当分配完成时:
variable=something
Run Code Online (Sandbox Code Playgroud)
[ -f $newfoldername/Primetime.eyetv],[是命令 ( test)-f和$newfoldername/Primetime.eyetv]是两个参数。它需要一个]找不到的第三个参数 ( )(参数必须用空格分隔),因此会显示错误。[-f $newfoldername/Primetime.eyetv]尝试运行[-f带参数的命令$newfoldername/Primetime.eyetv]通常对于这种情况,将您的代码粘贴到shellcheck 中并查看反馈。
这是你修改后的脚本
#!/bin/bash
folder="ABC" #no spaces between assignment
useracct='test'
day=$(date "+%d") # use $() to assign return value of date command to variable
month=$(date "+%B")
year=$(date "+%Y")
folderToBeMoved="/users/$useracct/Documents/Archive/Primetime.eyetv"
newfoldername="/Volumes/Media/Network/$folder/$month$day$year"
ECHO "Network is $network" $network
ECHO "day is $day"
ECHO "Month is $month"
ECHO "YEAR is $year"
ECHO "source is $folderToBeMoved"
ECHO "dest is $newfoldername"
mkdir "$newfoldername"
cp -R "$folderToBeMoved" "$newfoldername"
if [ -f "$newfoldername/Primetime.eyetv" ]; then # <-- put a space at square brackets and quote your variables.
rm "$folderToBeMoved";
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90014 次 |
| 最近记录: |