Using input from read to allow user to designate a specific volume

I am attempting to script the creation of MacOS installation flash media using read to allow the user to designate the name of the volume and store it in the variable VOLNAME. When I run the script, and input the name of the volume, I get the error:

': not a valid identifier: `VOLNAME
HSInstaller: line 7: VOLNAME: command not found
#!/bin/sh
# script for creating High Sierra installation media
# Get name of USB drive Volume
echo "Volume name to be used to create installation media (current volume content will be erased)"
read VOLNAME
sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/$(VOLNAME)

I was able to use a similar substitution in a script to connect a network share without issue:

#!/bin/sh
# script for connecting to file shares.
# Get UserID and password.
echo " UID"
read UID
echo "Password"
read -s password
# Have user provide path
echo "Provide the network path to the directory you wish to connect to."
echo "use the following format:server/directory/directory"
echo "for example AR101/Dir/Team"
read NetPth
open smb://$UID:$password@$NetPth

I've had no issues with the second script. Not sure why the first is unable to use the input given. Any advice would be appreciated.

What you use is "command substitution" $(...) (in a form not necessarily provided by your sh shell), but you need variable expansion ${...} .

1 Like

Thank you for the reply. I did as you suggested, and changed

--volume /Volumes/$(VOLNAME)

to

--volume /Volumes/${VOLNAME}

but still get the same error. I get it when I used

--volume /Volumes/$VOLNAME

as well (in the first iteration of this I had attempted). The error

': not a valid identifier: `VOLNAME
HSInstaller: line 7: VOLNAME: command not found

is curious, as the leading single quote seems like it belongs at the end of the line behind 'VOLNAME and the incorrect encapsulation appears to be making it read the variable as a command. Is there another way to pass the input?

Do you have DOS line terminators <CR> (\r, 0x0D, ^M)? Does "creation of MacOS installation flash media" mean you're running everything on a MacOS? What's your OS and shell versions?

1 Like

I am doing this on MacOS High Sierra using Terminal version 2.8. The file was originally created in Notepad++ on a Windows PC with the .bash file extension. It has since been edited in VIM from the CLI on the MacBook, and the file extension on the end of the file name was dropped.

bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.

Edit:
Do you think I picked up unprintable characters when creating this in NP++? It's usually very good about keeping files appropriate to the type designated (hence the .bash extension I saved with). I guess I try recreating the file directly in VIM to see if that remedies the problem.

---------- Post updated at 09:36 AM ---------- Previous update was at 09:04 AM ----------

That was it. I remade the file line for line in VIM and it works like a charm. I noticed that the original file in VIM had the following as I was looking at it to transcribe the new file:

"HSInstaller" [dos] 7L, 333C

Thank you so much for your help, I can't believe I overlooked that as many times as I had the file open in VIM.