在默认的shell中,下面给出的for循环
for ((i=$llimit; i<=$ulimit; i++));
do
echo $i
done;它抛出错误“(‘不是预期的’)
但是当切换到bash外壳时
for循环工作得很好
有没有办法改变shell脚本中的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;发布于 2014-01-16 14:17:15
您所使用的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发布于 2014-01-16 14:00:34
关于“默认shell”,我猜您是指/bin/sh?是否有一行开始"#!“在剧本的顶端?
Bash与sh向后兼容。如果您将"#!/bin/ bash“(不带引号)作为第一行,这将使整个程序在bash下运行。
发布于 2014-01-16 14:05:55
尝试另一个for循环语法
for counter in {$llimit..$ulimit}
do
your logic
done这适用于所有类型的外壳。
或者#!bin/bash也适用于您的情况。
https://stackoverflow.com/questions/21163722
复制相似问题