Unexpected end of file, why?

I am getting a "line 47: syntax error: unexpected end of file", why? According to my estimate, line 47 is 2 lines after the last line of code here. Also, the $1 variable represents the current user logging in, and the script runs with root privileges (This is a Mac OS login hook script using BASH).

#!/bin/bash

# Script to Create a userChrome.css, lock down network prefs, and remove /Applications/iTunes.app
# Defining Variables, DIR2 is the User's home directory path on server, DIR is the User's Firefox Profile Name

DIR2=`dscacheutil -q User |grep ${1} |grep dir |awk '{print $2}'`
DIR=`ls ${DIR2}/Library/Application\ Support/Firefox/Profiles |grep default`
MANAGERS='dixonb,oconnorw,abbaziam,freym,rosik,cicciag,brownd,localadmin,leventhalg,effiongw,heeseb'

# Do not run script if the user logging in is an admin (Manager or MIS user, see list above)

echo $MANAGERS |grep -q ${1}

if [ $? -eq 0 ]; then
exit
else
echo ""
 
 # Check for userchrome file to remove Firefox network settings button and lock down preferences for user

if [  -e ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css ]; then
echo ""
else 
cd ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome ; touch ./userChrome.css
fi

echo "@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* set default namespace to XUL */" > ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css
echo "#BrowserPreferences #connectionSettings {display: none !important;}" >> ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css
echo "#BrowserPreferences #connectionGroup {display: none !important;}" >> ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css

# Set permissions so user cannot change or delete userchrome.

#chown admin ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css
#chown admin ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome
#chmod 1755 ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css

cat ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js |grep 192.168.171.4 || printf "%s\n" 'user_pref("network.proxy.http", "192.168.171.4");' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js;printf "%s\n" 'user_pref("network.proxy.http_port", 8080);' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js;printf "%s\n" 'user_pref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, conair.com, conair.lan,");' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js;printf "%s\n" 'user_pref("network.proxy.type", 1);' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js

# Remove iTunes if it exists in /Applications

if [ -e /Applications/iTunes.app ]; then
rm -rf /Applications/iTunes.app
else
echo ""
fi

---------- Post updated at 10:40 AM ---------- Previous update was at 10:38 AM ----------

This is a login hook which means it runs when a user logs in, runs with root privileges, and the $1 variable represents the current user who is logging in. Mac OS X

[quote=glev2005;302363081]
I am getting a "line 47: syntax error: unexpected end of file", why?

#!/bin/bash

# Script to Create a userChrome.css, lock down network prefs, and remove /Applications/iTunes.app
# Defining Variables, DIR2 is the User's home directory path on server, DIR is the User's Firefox Profile Name

DIR2=`dscacheutil -q User |grep ${1} |grep dir |awk '{print $2}'`
DIR=`ls ${DIR2}/Library/Application\ Support/Firefox/Profiles |grep default`
MANAGERS='dixonb,oconnorw,abbaziam,freym,rosik,cicciag,brownd,localadmin,leventhalg,effiongw,heeseb'

# Do not run script if the user logging in is an admin (Manager or MIS user, see list above)

echo $MANAGERS |grep -q ${1}

if [ $? -eq 0 ]; then
exit
else
echo ""
  ????? where is the fi clause


 # Check for userchrome file to remove Firefox network settings button and lock down preferences for user

if [  -e ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css ]; then
echo ""
else 
cd ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome ; touch ./userChrome.css
fi

echo "@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* set default namespace to XUL */" > ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css
echo "#BrowserPreferences #connectionSettings {display: none !important;}" >> ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css
echo "#BrowserPreferences #connectionGroup {display: none !important;}" >> ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css

# Set permissions so user cannot change or delete userchrome.

#chown admin ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css
#chown admin ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome
#chmod 1755 ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css

cat ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js |grep 192.168.171.4 || printf "%s\n" 'user_pref("network.proxy.http", "192.168.171.4");' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js;printf "%s\n" 'user_pref("network.proxy.http_port", 8080);' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js;printf "%s\n" 'user_pref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, conair.com, conair.lan,");' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js;printf "%s\n" 'user_pref("network.proxy.type", 1);' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js

# Remove iTunes if it exists in /Applications

if [ -e /Applications/iTunes.app ]; then
rm -rf /Applications/iTunes.app
else
echo ""
fi

I'm sorry I wish it were that easy, but I must have accidentally erased the fi when I copied it up to UNIX.com Here is the actual script copied again complete.

#!/bin/bash

# Script to Create a userChrome.css, lock down network prefs, and remove /Applications/iTunes.app
# Defining Variables, DIR2 is the User's home directory path on server, DIR is the User's Firefox Profile Name

DIR2=`dscacheutil -q User |grep ${1} |grep dir |awk '{print $2}'`
DIR=`ls ${DIR2}/Library/Application\ Support/Firefox/Profiles |grep default`
MANAGERS='dixonb,oconnorw,abbaziam,freym,rosik,cicciag,brownd,localadmin,leventhalg,effiongw,heeseb'

# Do not run script if the user logging in is an admin (Manager or MIS user, see list above)

echo $MANAGERS |grep -q ${1}

if [ $? -eq 0 ]; then
exit
else
echo ""
fi
 # Check for userchrome file to remove Firefox network settings button and lock down preferences for user

if [  -e ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css ]; then
echo ""
else 
cd ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome ; touch ./userChrome.css
fi

echo "@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* set default namespace to XUL */" > ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css
echo "#BrowserPreferences #connectionSettings {display: none !important;}" >> ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css
echo "#BrowserPreferences #connectionGroup {display: none !important;}" >> ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css

# Set permissions so user cannot change or delete userchrome.

#chown admin ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css
#chown admin ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome
#chmod 1755 ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css

cat ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js |grep 192.168.171.4 || printf "%s\n" 'user_pref("network.proxy.http", "192.168.171.4");' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js;printf "%s\n" 'user_pref("network.proxy.http_port", 8080);' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js;printf "%s\n" 'user_pref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, conair.com, conair.lan,");' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js;printf "%s\n" 'user_pref("network.proxy.type", 1);' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js

# Remove iTunes if it exists in /Applications

if [ -e /Applications/iTunes.app ]; then
rm -rf /Applications/iTunes.app
else
echo ""
fi

Hi, when I've had similar messages on a Linux system it's usually because I've forgotten to exit the code correctly. I notice that you have on line 10 ( skipping blank lines ) you have "exit" but don't give an exit code, try:

exit 0

also I can't find any other exit command which means your code runs reaches the end it doesn't exit so the shell unexpectedly gets to the end of the file. Try adding exit 0 after the last line. So your complete code would look like this:

#!/bin/bash

# Script to Create a userChrome.css, lock down network prefs, and remove /Applications/iTunes.app
# Defining Variables, DIR2 is the User's home directory path on server, DIR is the User's Firefox Profile Name

DIR2=`dscacheutil -q User |grep ${1} |grep dir |awk '{print $2}'`
DIR=`ls ${DIR2}/Library/Application\ Support/Firefox/Profiles |grep default`
MANAGERS='dixonb,oconnorw,abbaziam,freym,rosik,cicciag,brownd,localadmin,leventhalg,effiongw,heeseb'

# Do not run script if the user logging in is an admin (Manager or MIS user, see list above)

echo $MANAGERS |grep -q ${1}

if [ $? -eq 0 ]; then
exit 0
else
echo ""
fi
 # Check for userchrome file to remove Firefox network settings button and lock down preferences for user

if [  -e ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css ]; then
echo ""
else 
cd ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome ; touch ./userChrome.css
fi

echo "@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* set default namespace to XUL */" > ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css
echo "#BrowserPreferences #connectionSettings {display: none !important;}" >> ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css
echo "#BrowserPreferences #connectionGroup {display: none !important;}" >> ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css

# Set permissions so user cannot change or delete userchrome.

#chown admin ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css
#chown admin ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome
#chmod 1755 ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/chrome/userChrome.css

cat ${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js |grep 192.168.171.4 || printf "%s\n" 'user_pref("network.proxy.http", "192.168.171.4");' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js;printf "%s\n" 'user_pref("network.proxy.http_port", 8080);' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js;printf "%s\n" 'user_pref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, conair.com, conair.lan,");' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js;printf "%s\n" 'user_pref("network.proxy.type", 1);' >>${DIR2}/Library/Application\ Support/Firefox/Profiles/${DIR}/prefs.js

# Remove iTunes if it exists in /Applications

if [ -e /Applications/iTunes.app ]; then
rm -rf /Applications/iTunes.app
else
echo ""
fi
exit 0

Hope this helps.

Have you edit the file in or another platform (windows)?

I edited the file using textwrangler on my Mac, so no, it has only been OS X. I did think about that though, that perhaps the editor put a special character somewhere, but this app is supposed to be used for this type of stuff, so I would hope it doesnt do that. jkdwiz, I will try your idea.

---------- Post updated at 10:25 AM ---------- Previous update was at 10:22 AM ----------

I will see if that works next time they log in.. Also if anyone has any suggestions for cleaning u my code, I would love to improve my BASH.