这是我的第一个 Bash 脚本,我已尽最大努力自己找到大部分答案,但我最终遇到了障碍。
该脚本似乎(大部分)有效,但我没有收到 iMac 端的文件。
这里的想法是拥有一个专用的 RPi torrent 盒子,可以自动将文件传输到主计算机,然后在 RPi 系统上清理目录/文件以节省空间。
该脚本似乎可以处理向其抛出的任何目录和/或文件,空格等不会影响其启动 SCP 的能力。
我需要有 Bash 脚本经验的人对语法进行审查才能找到我的错误。这是我的完整脚本。任何提高效率的提议将不胜感激。
更新了迄今为止使用的更正。
缩小问题范围:select_target_directory
功能 我这target_directory_selected=
部分做对了吗?不确定这个变量是否被填充。
#!/bin/bash
# variables declared
directory_on_localhost="/mnt/32gb_pny_usbdrive/completed/*"
directory_on_remote_host_primary="/Volumes/Drobo/zIncoming"
directory_on_remote_host_secondary="/Users/josh/Desktop/zIncoming"
target_directory_selected=""
# functions defined
# This function basically verifies the Drobo is mounted on the iMac.
select_target_directory () {
if [ 'ssh [email protected] test -d /Volumes/Drobo/zIncoming' ]
then
target_directory_selected="$directory_on_remote_host_primary"
else
target_directory_selected="$directory_on_remote_host_secondary"
fi
}
# This function copies target <directories/files> to the target directory (via scp)
# and then deletes them from the local machine to conserve valuable storage space.
process_the_files () {
for current_target in $directory_on_localhost
do
scp -r "$current_target" [email protected]:"$target_directory_selected"
rm -rf "$current_target"
done
}
# main logic begins
# [Tests "$directory_host" for contents] && [iMac status (i.e. powered off or on)]
# IF "$directory_host" is not empty AND iMac is powered on THEN functions are invoked
# And Main Logic is completed and script ends, ELSE script ends.
if [ "$(ls -A $directory_on_localhost)" ] && [ 'nc -z 10.0.1.2 22 > /dev/null' ]
then
select_target_directory
process_the_files
else
exit
fi
# main logic ends
答案1
而不是这个:
if [ 'ssh [email protected] test -d /Volumes/Drobo/zIncoming' ] then target_directory_selected="$directory_on_remote_host_primary" else target_directory_selected="$directory_on_remote_host_secondary" fi
你的意思可能是这样的:
if ssh [email protected] test -d /Volumes/Drobo/zIncoming
then
target_directory_selected="$directory_on_remote_host_primary"
else
target_directory_selected="$directory_on_remote_host_secondary"
fi
请注意,这[ 'non-empty string' ]
始终是正确的。您可能想在命令上使用条件ssh
,就像我为您重写的方式一样。
类似地,您可能希望在脚本的后面[ 'nc -z 10.0.1.2 22 > /dev/null' ]
用替换nc -z 10.0.1.2 22 > /dev/null
。