首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在shell脚本中更改shell

在shell脚本中更改shell
EN

Stack Overflow用户
提问于 2014-01-16 13:54:48
回答 3查看 579关注 0票数 2

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

代码语言:javascript
复制
for ((i=$llimit; i<=$ulimit; i++)); 
do 
  echo $i
done;

它抛出错误“(‘不是预期的’)

但是当切换到bash外壳时

for循环工作得很好

有没有办法改变shell脚本中的shell?

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

编辑:

这是hte shell脚本

代码语言:javascript
复制
#!/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;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-16 14:17:15

您所使用的C样式for循环是一种bashism。

换行

代码语言:javascript
复制
for ((i=$llimit; i<=$ulimit; i++));

代码语言:javascript
复制
for i in $(seq $llimit $ulimit);

它对shbash都很有效。

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

代码语言:javascript
复制
i=$llimit
while [ $i -le $ulimit ]; do
  echo "Do something here"
  let i=i+1
done
票数 2
EN

Stack Overflow用户

发布于 2014-01-16 14:00:34

关于“默认shell”,我猜您是指/bin/sh?是否有一行开始"#!“在剧本的顶端?

Bash与sh向后兼容。如果您将"#!/bin/ bash“(不带引号)作为第一行,这将使整个程序在bash下运行。

票数 0
EN

Stack Overflow用户

发布于 2014-01-16 14:05:55

尝试另一个for循环语法

代码语言:javascript
复制
for counter in {$llimit..$ulimit}
do

your logic

done

这适用于所有类型的外壳。

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

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21163722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档