在默认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;
答案 0 :(得分:2)
您使用的C风格for
循环是 bashism 。
更改行
for ((i=$llimit; i<=$ulimit; i++));
到
for i in $(seq $llimit $ulimit);
它适用于sh
和bash
。
编辑:如果您没有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也适用于您的情况