bad substitution Error while renaming Extension


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting bad substitution Error while renaming Extension
# 1  
Old 06-08-2010
bad substitution Error while renaming Extension

Hi All,

We are in the process of Migrating from AIX 4 to Solaris 10 and getting a Few Errors.

I have been programming in shell but could never establish muself as an expert, hence please need you help.

I am Getting Bad Substitution error in my script, I have isolated the issue and its illustrated as below

Code:
$ FILENAME=TEST_FILE.txt
$ echo $FILENAME
TEST_FILE.txt
$ echo ${FILENAME%.txt}
bad substitution
$

But the above Works absolutely fine in my AIX environment (below)
Code:
$ FILENAME=TEST_FILE.txt
$ echo $FILENAME
TEST_FILE.txt
$ echo ${FILENAME%.txt}
TEST_FILE
$

How can i get this working in Solaris, One thing i noticed is that the Default Shell in My AIX is Korn and in Solaris is Bourn
I tried setting the SHELL variable to Korn in my Solaris machine by setting SHELL=/usr/bin/ksh
but still the same result.

P.s. the above is just an Example, the Shell script uses the ${..........} for much advanced conversions:

Please Help.

Last edited by Franklin52; 06-08-2010 at 09:23 AM.. Reason: Please use code tags!
# 2  
Old 06-08-2010
Hi.

Setting the SHELL variable in this way will not change your shell. Your script should have #!/usr/bin/ksh in the first line.

The substitution should work fine in Solaris 10 (it does in KSH on Solaris 8 where I just tested it):

Code:
# uname -a
SunOS laberv12 5.8 Generic_108528-15 sun4u sparc SUNW,UltraAX-i2
# echo $0
-ksh
# FILENAME=TEST_FILE.txt
# echo ${FILENAME%.txt}
TEST_FILE

# 3  
Old 06-08-2010
?
Code:
s99:/export/home/vbe $ FILENAME=TEST_FILE.txt
s99:/export/home/vbe $  echo $FILENAME
TEST_FILE.txt
s99:/export/home/vbe $ echo ${FILENAME%.txt}
TEST_FILE
s99:/export/home/vbe $ uname -r
5.10
s99:/export/home/vbe $ echo $SHELL
/usr/bin/ksh
s99:/export/home/vbe $

What shell are you using?
# 4  
Old 06-09-2010
I guess the default Shell is Bourn
Code:
$ echo $0
-sh

as suggested in one of the above posts i did create a shell script and add #!/usr/bin/ksh to the first line (See below)
Code:
$ uname -a
SunOS m5k604d1 5.10 Generic_139555-08 sun4u sparc SUNW,SPARC-Enterprise
$ echo $0
-sh
$ cat ren_files.sh
#!/usr/bin/ksh
set -a

FILENAME=TEST_FILE.txt
echo ${FILENAME%.txt}

set +a

$ sh ren_files.sh
ren_files.sh: bad substitution
$

Not Sure whats wrong out here.

Last edited by Franklin52; 06-09-2010 at 07:38 AM.. Reason: Please use code tags!
# 5  
Old 06-09-2010
Hi.

Running the script as:
Code:
$ sh ren_files.sh

will override the #!/usr/bin/ksh in your script, and run the script with sh.

Run the script as
Code:
./ren_files.sh

or even
Code:
ksh ren_files.sh

# 6  
Old 06-09-2010
Quote:
Originally Posted by paragkhanore
$ sh ren_files.sh
ren_files.sh: bad substitution
$[/CODE]
If you do sh ren_files.sh, then the shebang line gets ignored and the script is run with sh.
Modify the script to be executable and call script like ./ren_files.sh then.
# 7  
Old 06-09-2010
That Did it

Code:
./ren_files.sh

works as expected.

Thanks a Ton!!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bad substitution

Cant undestand :) why i have an error on line 2.it is working on my other boxes #!/bin/bash ret=$(echo Q | timeout 5 openssl s_client connect "${1`hostname`}:${2-443}" -ssl3 2> /dev/null) if echo "${ret}" | grep -q 'Protocol.*SSLv3'; then if echo "${ret}" | grep -q 'Cipher.*0000'; then ... (7 Replies)
Discussion started by: kenshinhimura
7 Replies

2. Shell Programming and Scripting

ksh - Get last character from string - Bad Substitution error

I want to get the last character from my machine name using the following code, the default shell is bash, the script runs in ksh. I get 'bad' substitution error on running the script, but works fine if run using dot and space. Why? $ echo $0 bash $ cat -n myenv.sh 1 ... (8 Replies)
Discussion started by: ysrini
8 Replies

3. Shell Programming and Scripting

Bad substitution error while working with substring

Hi I'm using ksh. And i'm trying to get the substring like below. but giving the following error #!/bin/ksh foo=teststring bar=${foo:0:5} echo $bar And the error is ./sbstr_test.sh: bar=${foo:0:5}: bad substitution what is wrong in this script. Please correct me ... (3 Replies)
Discussion started by: smile689
3 Replies

4. Shell Programming and Scripting

Bad substitution error in shell script

I have script data.sh which has following error. Script Name : data.sh #!/bin/sh infile=$1 len=${#infile} echo $len texfile=${infile:0:$len-4} echo $texfile run command ./data.sh acb.xml I get following error message: (5 Replies)
Discussion started by: man4ish
5 Replies

5. Shell Programming and Scripting

Why I get bad bad substitution when using eval?

Why I get bad replace when using eval? $ map0=( "0" "0000" "0") $ i=0 $ eval echo \${map$i} 0000 $ a=`eval echo \${map$i}` !!!error happens!!! bash: ${map$i}: bad substitution How to resolve it ? Thanks! (5 Replies)
Discussion started by: 915086731
5 Replies

6. Shell Programming and Scripting

bad substitution error!

Hi All, I'm building a new shell script but i'm facing a problem with one line which is giving "bad substitution" error. Please assist script lines: #!/bin/sh printf "%s: " "Occurrence DATE (YYYYMMDD)"; read DATE shortdate=${DATE#??} o/p: ./test1: bad substitution This command is... (2 Replies)
Discussion started by: Dendany83
2 Replies

7. UNIX for Dummies Questions & Answers

bad substitution

#!/bin/bash a1=( win 12,01,02,03,04 ) a2=( pre 04,05,06 ) a3=( msn 06,07,08,09 ) Given the above arrays, I want the script to return/echo the following in a loop; win 12,01,02,03,04 pre 04,05,06,07 msn 06,07,08,09 But I can't get it to do as such. I've tried; (2 Replies)
Discussion started by: Muhammad Rahiz
2 Replies

8. Shell Programming and Scripting

bad substitution error in ksh

Hello, In bash I can use the following: TMP=12345 MID=${TMP:1:1} the expected result is: 2 but when using KSH I'm getting a ''bad substitution" error. What is the correct syntaxin ksh? Thanks (2 Replies)
Discussion started by: LiorAmitai
2 Replies

9. Shell Programming and Scripting

bad substitution error in ksh

hi, i created a shell script having the following content: #! /usr/bin/ksh FROM="myemail@domain.com" MAILTO="someemail@domain" SUBJECT="TEST" BODY="/export/home/adshocker/body.txt" ATTACH="/export/home/adshocker/attach.prog" echo $ATTACH ATTACH_NAME="${ATTACH##*/}" echo $ATTACH_NAME... (5 Replies)
Discussion started by: adshocker
5 Replies

10. Shell Programming and Scripting

Bad Substitution

Need Help... I am getting a bad substitution error on my script on a Solaris Server. However the script has been proven to work on HPUX and Solaris servers... #!/usr/bin/sh # # Set the location of the tzupdater.jar file # JAR=/tmp/tzupdater.jar # <<<<< UPDATE THIS LINE... (3 Replies)
Discussion started by: D_Redd74
3 Replies
Login or Register to Ask a Question