AppleScriptからスケジュールに従って実行されるbashスクリプトを使用して、毎晩自動的にフォルダーから新しいフォルダーへのファイルの移動を自動化しようとしています。 Mac OSXでbashスクリプトを作成しようとしていますが、失敗し続けます。要するに、これは私が持っているものです(私のecho
sはすべてエラーチェック用です):
#!/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
さて、私の最初の問題は、変数をまったく設定できないことです。リテラルと同等にしたリテラルのものでさえ。すべてのecho
sが空白になります。日、月、年のいずれかを取得することもできません。同様に空白になります。
-fが見つからないというエラーが表示されます。
予期しないファイルの終わりがあるというエラーが表示されます。
ファイルを作成し、chmod u+x scriptname.sh
なぜ何も機能していないのかわかりません。 OSXでこのbashスクリプトを使用するのは初めてで、Windows vbscriptの経験しかありません。どんな助けも素晴らしいでしょう、ありがとう!
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
_
最後の3行がコメント化されているため、この出力は次のとおりです。
_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
_
5つの問題:
"$(...)"
を使用して、コマンドの出力をテキストとして取得します。[
はコマンドです。引数と引数の間にスペースを入れてください。echo
が必要です。rm "$folderToBeMoved"
ここにあなたの修正されたスクリプトがあります
#!/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
folder = "ABC"
は、引数=
および"ABC"
を使用して、folder
という名前のコマンドを実行しようとします。 bashのコマンドの形式は次のとおりです。
command arguments separated with space
割り当ては以下で行われます:
variable=something
[ -f $newfoldername/Primetime.eyetv]
では、[
はコマンド(test
)であり、-f
と$newfoldername/Primetime.eyetv]
は2つの引数です。見つけることができない3番目の引数(]
)が必要なので(引数はスペースで区切る必要があります)、エラーが表示されます。[-f $newfoldername/Primetime.eyetv]
はコマンド[-f
を引数$newfoldername/Primetime.eyetv]
で実行しようとします通常、このような場合は、コードを shellcheck に貼り付けて、フィードバックを確認してください。