Visit Our UNIX and Linux User Community


Error when executing script


 
Thread Tools Search this Thread
Operating Systems Linux Red Hat Error when executing script
# 1  
Old 04-19-2017
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?
# 2  
Old 04-19-2017
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

# 3  
Old 04-19-2017
Thanks! That did the trick!
# 4  
Old 04-19-2017
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
# 5  
Old 04-19-2017
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!
# 6  
Old 05-05-2017
I have another question on command substitution.
The same script, but different command substitution.

I simply run this command from the terminal :

Code:
[root@L28tstream1 emokheng]# stat -c %z * | awk '{print $1}'
2015-08-18
2015-08-18
[root@L28tstream1 emokheng]#

As you see, I get the dates of the file generated in the directory.

However, when I attempt to use this command as a substitute, like this, I get a diferent output :

Code:
[root@L28tstream1 emokheng]# D=$(stat -c %z * | awk '{print $1}')
[root@L28tstream1 emokheng]# echo $D
2015-08-18 2015-08-18

It all displays in one line. Why is this, and how do I get it to display in two separate lines like the command above this?

Actually the main output I want is to get ONLY the day section of the whole date. Means I want to extract only '18' from 2015-08-18. This is for all the files in the directory.
Therefore, I use this command :

Code:
[root@L28tstream1 emokheng]# FDAY=$(date -d "$D" '+%d')
date: invalid date `2015-08-18\n2015-08-18'
[root@L28tstream1 emokheng]#

However, as you can see, the error is shown. Perhaps if
Code:
echo $D

displays two separate lines, the error above will not happen?

How do I display ONLY the day part of the whole date for a file in a directory?

Last edited by anaigini45; 05-05-2017 at 07:12 AM..
# 7  
Old 05-05-2017
The -d option of date takes one single date only, not several separated by a line feed char. How about
Code:
D="$(stat -c %z sh* | awk -F"[ -]" '{print $3}')"
echo "$D"
03
03

This User Gave Thanks to RudiC For This Post:

Previous Thread | Next Thread
Test Your Knowledge in Computers #631
Difficulty: Medium
iPhone OS 1.0 was first released with great fanfare during the US Super Bowl in 2007.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Gettting error while executing script

getting error as below while executing script in linux. OS version: Linux VGP-3GPSDB-LX 3.10.0-514.el7.x86_64 #1 SMP Wed Oct 19 11:24:13 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux ./imxtract.sh: line 395: unexpected EOF while looking for matching ``' ./imxtract.sh: line 402: syntax error:... (1 Reply)
Discussion started by: Riverstone
1 Replies

2. UNIX for Dummies Questions & Answers

Error executing the script

I have the following script test.sh owned by dwdev account and group dwdev, the permissions on the script are as follows. -rw-r-x--- 1 dwdev dwdev 279 Sep 17 13:19 test.sh Groups: cat /etc/group | grep dwdev dwdev:x:704:dwdev dwgroup:x:725:dwdev writers:x:726:dwdev User: cat /etc/passwd |... (3 Replies)
Discussion started by: Ariean
3 Replies

3. Linux

Libssh2 error while executing script

hi all, i am getting libssh2 error while executing script in RHEL 6, when i locate that file its not there below is the ouput of this # locate libssh2_agent_init # cat /etc/issue Red Hat Enterprise Linux Server release 6.1 (Santiago) Kernel \r on an \m how do i resolve this issue, i... (1 Reply)
Discussion started by: muzaffar.k
1 Replies

4. Shell Programming and Scripting

Error executing script

Please delete de thread. Thanks. (10 Replies)
Discussion started by: Rodrih92
10 Replies

5. Shell Programming and Scripting

getting the error 'not found' while executing the script

Hi, I am not able to figure out what the problem is: getting the following error sqltst.sh: 1: not found here is the script #!/bin/sh . /home/dev1/.profile . /home/dev1/.infenv `sqlplus -s $REPDB_LOGON << EOF SET SERVEROUT ON SET FEEDBACK OFF SET HEADING OFF SET TRIMSPOOL... (4 Replies)
Discussion started by: svajhala
4 Replies

6. Shell Programming and Scripting

Error while executing a script

Hi Please assist. Im getting an error while execuing the script name d "cdsnd.basel.cd_new " as siiadm user. Thanks. siiadm> ls -l total 64 -rwxr-xr-x 1 siiadm sboadm 1004 Sep 17 2008 cdsnd.basel.cd -rwxr-xr-x 1 siiadm sapsys 998 Nov 16 09:14 cdsnd.basel.cd_new... (1 Reply)
Discussion started by: samsungsamsung
1 Replies

7. UNIX for Dummies Questions & Answers

Error Executing the script.

Hi , I m getting an error after executing the script. My script. Script is used to find out the date on 8 different machines(mentioned in SERVERNAMES file). I have added public key to avoid ssh password and ssh without password working fine. #!/bin/sh fn_VMFind() { Date=`ssh -t... (5 Replies)
Discussion started by: pinga123
5 Replies

8. Shell Programming and Scripting

Error while executing the below script

I am executing the below in telnet #!/usr/bin/ksh File1=simple.txt # The file to check LogFile=simple.log # The log file DelayMax=30 # Timeout delay Tolerance=2 # BEGIN ############################## while true do StampNow=$(date +%s)/60 # stamp in minutes ... (3 Replies)
Discussion started by: chinniforu2003
3 Replies

9. Shell Programming and Scripting

Error while executing a script

My script is as below : #!/bin/sh for line in `cat Results.txt` do FEILD1=`echo $line |awk -F"|" '{print $1}'` FEILD2=`echo $line |awk -F"|" '{print $2}'` FEILD3=`echo $line |awk -F"|" '{print $3}'` FEILD4=`echo $line |awk -F"|" '{print $4}'` echo "$FEILD1 $FIELD2 $FIELD3 $FIELD4" done ... (15 Replies)
Discussion started by: shwetainnani
15 Replies

10. Shell Programming and Scripting

error while executing the script

Hello I am executing the following script nawk 'NR == 1 || substr($0,63,5) ~ /H... / && \ _++ == 2 { fn && close(fn); fn = "part_" ++c; _ = 1 } { print > fn }' sample.dat When i execute as it is it is executing fine. but when i execute the whole script as a single line like below ... (2 Replies)
Discussion started by: dsdev_123
2 Replies

Featured Tech Videos