Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to set variables in bash script [duplicate]

Tags:

bash

scripting

I am attempting to automate moving files from a folder to a new folder automatically every night using a bash script run from AppleScript on a schedule. I am attempting to write a bash script on Mac OSX, and it keeps failing. In short this is what I have (all my echos are for error checking):

#!/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 

Now my first problem is that I cannot set variables at all. Even literal ones where I just make it equal some literal. All my echos come out blank. I cannot grab the day, month, or year either,it comes out blank as well.

I get an error saying that -f is not found.

I get an error saying there is an unexpected end of file.

I made the file and did a chmod u+x scriptname.sh

I'm not sure why nothing is working at all. I am very new to this bash script on OSX, and only have experience with windows vbscript. Any help would be great, thanks!

like image 490
cohortq Avatar asked Mar 17 '10 01:03

cohortq


People also ask

Can you set variables in bash?

You can use variables as in any programming languages. There are no data types. A variable in bash can contain a number, a character, a string of characters. You have no need to declare a variable, just assigning a value to its reference will create it.

What is $() in bash script?

$() Command Substitution According to the official GNU Bash Reference manual: “Command substitution allows the output of a command to replace the command itself.

What is $_ in bash?

$_ (dollar underscore) is another special bash parameter and used to reference the absolute file name of the shell or bash script which is being executed as specified in the argument list. This bash parameter is also used to hold the name of mail file while checking emails.

How do I set environment variables in bash?

To set an environment variable everytime, use the export command in the . bashrc file (or the appropriate initialization file for your shell). To set an environment variable from a script, use the export command in the script, and then source the script. If you execute the script it will not work.


1 Answers

Assignment in bash scripts cannot have spaces around the = and you probably want your date commands enclosed in backticks $():

#!/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 

With the last three lines commented out, for me this outputs:

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 
like image 177
Isaac Avatar answered Sep 23 '22 21:09

Isaac