在shell脚本中更改shell

时间:2014-01-16 13:54:49

标签: linux bash shell

在默认shell中 下面给出的for循环

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

它抛出错误“'(('不是预期的'

但切换到bash shell时

for循环正常

有没有办法在shellcript中更改shell

或任何其他解决方案,因为这个for循环在shell脚本

编辑:

这是hte shell脚本

#!/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;

3 个答案:

答案 0 :(得分:2)

您使用的C风格for循环是 bashism

更改行

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

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

它适用于shbash


编辑:如果您没有seq,可以将循环更改为:

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

答案 1 :(得分:0)

通过“默认shell”我假设你的意思是/ bin / sh?是否有一行开头“#!”在脚本的顶部?

Bash几乎与sh兼容。如果你把“#!/ bin / bash”(不带引号)作为第一行,这应该让整个事情在bash下运行。

答案 2 :(得分:-2)

尝试另一种for循环语法

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

your logic

done

适用于所有类型的贝壳。

或#!bin / bash也适用于您的情况