Unix/Linux Go Back    


Red Hat Red Hat is the world's leading open source technology solutions provider with offerings including Red Hat Enterprise Linux (RHEL), Fedora, open source applications, security and systems management, virtualization, and Services Oriented Architecture (SOA) solutions.

Error when executing script

Red Hat


Reply    
 
Thread Tools Search this Thread Display Modes
    #1  
Old Unix and Linux 1 Week Ago
anaigini45 anaigini45 is offline
Registered User
 
Join Date: Oct 2009
Last Activity: 26 April 2017, 6:29 AM EDT
Posts: 58
Thanks: 0
Thanked 0 Times in 0 Posts
Error when executing script

Hi,

I wrote this script to test if the output for DIR1 and DIR2 comes out as I want :


Code:
#!/bin/bash

DAY=$(date +%d)
MONTH=$(date +%b)
YEAR=$(date +%Y)
DIR1=$($MONTH$YEAR"_Blast_BC01")
DIR2=$($MONTH$YEAR"_Blast_BC15")

echo $DIR1
echo $DIR2

This is the output I want for echo $DIR1 : Apr2017_Blast_BC01
And this is the output I want for echo $DIR2 : Apr2017_Blast_BC15

This is the error I get when I execute the script :


Code:
[root@L28tstream1 ~]# ./script3.sh
./script3.sh: line 6: Apr2017_Blast_BC01: command not found
./script3.sh: line 7: Apr2017_Blast_BC15: command not found

What is wrong with the syntax in the script above?
Sponsored Links
    #2  
Old Unix and Linux 1 Week Ago
cero cero is offline
Registered User
 
Join Date: Aug 2006
Last Activity: 26 April 2017, 7:12 AM EDT
Posts: 451
Thanks: 4
Thanked 98 Times in 90 Posts
Hi,

the construct $(command) is called command substitution and evaluates to the output of command and you use it correctly for the assignment of the variables DAY, MONTH and YEAR. You do not want to use command substitution when you assign the values for DIR1 and DIR2.

Code:
#!/bin/bash

DAY=$(date +%d)
MONTH=$(date +%b)
YEAR=$(date +%Y)
DIR1=$MONTH$YEAR"_Blast_BC01"
DIR2=$MONTH$YEAR"_Blast_BC15"

echo $DIR1
echo $DIR2

Sponsored Links
    #3  
Old Unix and Linux 1 Week Ago
anaigini45 anaigini45 is offline
Registered User
 
Join Date: Oct 2009
Last Activity: 26 April 2017, 6:29 AM EDT
Posts: 58
Thanks: 0
Thanked 0 Times in 0 Posts
Thanks! That did the trick!
    #4  
Old Unix and Linux 1 Week Ago
rbatte1 rbatte1 is offline Forum Staff  
Root armed
 
Join Date: Jun 2007
Last Activity: 25 April 2017, 12:38 PM EDT
Location: Lancashire, UK
Posts: 3,076
Thanks: 1,286
Thanked 590 Times in 534 Posts
It would be safer to wrap the entire assignment in double quotes as a common practice so that if you accidentally assign a space to either variable, then the assignment to DIR1 or DIR2 will not fail:-

Code:
HI_VAR="TextOnly"
LO_VAR="Text and space"

MY_VAR1="${HI_VAR}${LO_VAR}_other_text"
MY_VAR2=${HI_VAR}${LO_VAR}"_other_text"       # May fail in some shells

I always clearly mark the variable name with curly braces { & } to ensure I don't confuse the variable with any literal text or underscores that follow. You can get trapped with things like this:-
Code:
/home/rbatte1> V1="Hello"
/home/rbatte1> V2="$V1_Goodbye"
/home/rbatte1> echo "\$V2=\"$V2\""
$V2=""

This is because the assignment is looking for variable V1_Goodbye (equivalent to ${V1_Goodbye} ) which has not been set.

I would also suggest that you could consolidate commands such that you just do this:-
Code:
MONTHYEAR=$(date +%b%Y)
DIR1="${MONTHYEAR}_Blast_BC01"

Of course, it depends what you use the values for elsewhere.



I hope that this helps,
Robin
Sponsored Links
    #5  
Old Unix and Linux 6 Days Ago
MadeInGermany MadeInGermany is online now Forum Advisor  
Registered User
 
Join Date: May 2012
Last Activity: 26 April 2017, 7:28 AM EDT
Location: Simplicity
Posts: 3,503
Thanks: 273
Thanked 1,162 Times in 1,055 Posts
Yes, a consolidation makes sense.

Code:
MONTHYEAR=$(date +%b%Y)
DIR1=${MONTHYEAR}_Blast_BC01
DIR2=${MONTHYEAR}_Blast_BC15

""Quoting of variables is never a mistake. Especially beginners should do it always!
But - now for the advanced user - the quoting of an assignment value is only needed if there is a literal space.

Code:
DIR3="${MONTHYEAR} Blast BC15"
echo "$DIR3"

Not if the space comes from a variable

Code:
NAME="Blast BC15 *"
DIR3=${MONTHYEAR}_$NAME
echo "$DIR3"

The latter is not an assignment - the argument for the echo command must be quoted!
Other

Code:
case ${MONTHYEAR}_$NAME in ...


Code:
[[ ${MONTHYEAR}_$NAME ... ]]

In all other cases the shell does first variable substitution then word splitting then globbing.
Last but not least, the [ ] is a false friend:

Code:
[ "${MONTHYEAR}_$NAME" ... ]

In fact the [ is a command and its arguments must be quoted!
Sponsored Links
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Linux More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Error while executing a script samsungsamsung Shell Programming and Scripting 1 11-17-2010 03:29 AM
Error Executing the script. pinga123 UNIX for Dummies Questions & Answers 5 07-08-2010 07:02 AM
Error while executing the below script chinniforu2003 Shell Programming and Scripting 3 11-09-2009 03:43 PM
Error while executing a script shwetainnani Shell Programming and Scripting 15 10-09-2009 09:12 AM
error while executing the script dsdev_123 Shell Programming and Scripting 2 03-30-2009 05:46 PM



All times are GMT -4. The time now is 07:44 AM.