简体   繁体   中英

Changing shell inside a shell script

in the default shell the for loop given below

for ((i=$llimit; i<=$ulimit; i++)); 
do 
  echo $i
done;

it throws error "'((' is not expected"

but when switching to the bash shell

the for loop works fine

is there a way to change shell inside a shellscript

or any other solution as this for loop is inside a shell script

EDIT:

this is hte shell script

#!/bin/bash
nav_var=`sqlplus -s tcs384160/tcs#1234 <<\EOF
set pagesize 0 feedback off verify off heading off echo off
select max(sequence#) from v$archived_log where applied='YES' and thread#=2 and        dest_id=2;
exit;
EOF`
echo $nav_var;
ulimit=`expr $nav_var - 30`;
llimit=`expr $ulimit - 200`;
for ((i=$llimit; i<=$ulimit; i++));
do ls -l arch_aceprod_2_${i}_743034701.arc;
done;

The C-style for loop you've used is a bashism .

Change the line

for ((i=$llimit; i<=$ulimit; i++));

to

for i in $(seq $llimit $ulimit);

and it would work well with both sh and bash .


EDIT: If you don't have seq , you could change the loop as:

i=$llimit
while [ $i -le $ulimit ]; do
  echo "Do something here"
  let i=i+1
done

By "default shell" I assume you mean /bin/sh? Is there a line starting "#!" at the top of the script?

Bash is pretty much backwards compatible with sh. If you put "#!/bin/bash" (without the quotes) as the first line this should get the whole thing to run under bash.

try another for loop syntax

for counter in {$llimit..$ulimit}
do

your logic

done

this works for all type of shells.

Or #!bin/bash will also work in your case

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM