将脚本从 csh 转换为 sh?
Convert script from csh to sh?
我正在尝试将 *.csh
脚本转换为 *.sh
。我在处理这个块时遇到了问题。
foreach f (tmp*)
echo $f
set zid = `grep db $f`
if !(-e "$zid".mol2) then
set filename = "$zid".mol2
else foreach n (`seq -w 1 11247`)
if !(-e "$zid"_"$n".mol2) then
set filename = "$zid"_"$n".mol2 break
endif
end
endif
mv -v $f $filename
end
我试着把它改成这样:
for f in tmp*
do
echo $f
set zid = `grep db $f`
if ! [-e "$zid".mol2] ; then
set filename = "$zid".mol2
else for n in `seq -w 1 11247`
if ! [-e "$zid"_"$n".mol2] ; then
set filename = "$zid"_"$n".mol2
break
fi
done
fi
mv -v $f $filename
done
但是我得到这个错误:
./scripts/ex01.sh: line 31: syntax error near unexpected token `if'
./scripts/ex01.sh: line 31: `if ! [-e "$zid"_"$n".mol2] ; then'
这部分我也有问题cat $VSTROOT/db.mol2 | csplit -ftmp -n4 -ks - '%^@.TRIPOS.MOLECULE%' '/^@.TRIPOS.MOLECULE/' '{*}'
我预设的地方VSTROOT=pwd
,但执行时它告诉我cat: pwd/db.mol2: No such file or directory
。
没有真正评论这个脚本的适当性,只是解决语法问题,主要错误是变量分配不正确,缺少 "do",misuse/abuse [
命令,以及一些其他细节。尝试:
for f in tmp*
do
echo "$f"
zid=$(grep db "$f")
if ! [ -e "$zid".mol2 ] ; then
filename="$zid".mol2
else
for n in $(seq -w 1 11247)
do
if ! [ -e "$zid"_"$n".mol2 ] ; then
filename="$zid"_"$n".mol2
break
fi
done
fi
mv -v "$f" "$filename"
done
Bash 不喜欢空格,它喜欢 vars 周围的括号......无论如何,它看起来像这样(未经测试的代码):
for f in tmp* ; do
echo $f
zid=$(grep db $f)
if ! [ -e "$zid".mol2 ] ; then
filename="$zid".mol2
else
for ((n=1; n<11248; n++ )) ; do
if ! [ -e "$zid"_"$n".mol2 ] ; then
filename="$zid"_"$n".mol2
break
fi
done
fi
mv -v $f $filename
done
我正在尝试将 *.csh
脚本转换为 *.sh
。我在处理这个块时遇到了问题。
foreach f (tmp*)
echo $f
set zid = `grep db $f`
if !(-e "$zid".mol2) then
set filename = "$zid".mol2
else foreach n (`seq -w 1 11247`)
if !(-e "$zid"_"$n".mol2) then
set filename = "$zid"_"$n".mol2 break
endif
end
endif
mv -v $f $filename
end
我试着把它改成这样:
for f in tmp*
do
echo $f
set zid = `grep db $f`
if ! [-e "$zid".mol2] ; then
set filename = "$zid".mol2
else for n in `seq -w 1 11247`
if ! [-e "$zid"_"$n".mol2] ; then
set filename = "$zid"_"$n".mol2
break
fi
done
fi
mv -v $f $filename
done
但是我得到这个错误:
./scripts/ex01.sh: line 31: syntax error near unexpected token `if'
./scripts/ex01.sh: line 31: `if ! [-e "$zid"_"$n".mol2] ; then'
这部分我也有问题cat $VSTROOT/db.mol2 | csplit -ftmp -n4 -ks - '%^@.TRIPOS.MOLECULE%' '/^@.TRIPOS.MOLECULE/' '{*}'
我预设的地方VSTROOT=pwd
,但执行时它告诉我cat: pwd/db.mol2: No such file or directory
。
没有真正评论这个脚本的适当性,只是解决语法问题,主要错误是变量分配不正确,缺少 "do",misuse/abuse [
命令,以及一些其他细节。尝试:
for f in tmp*
do
echo "$f"
zid=$(grep db "$f")
if ! [ -e "$zid".mol2 ] ; then
filename="$zid".mol2
else
for n in $(seq -w 1 11247)
do
if ! [ -e "$zid"_"$n".mol2 ] ; then
filename="$zid"_"$n".mol2
break
fi
done
fi
mv -v "$f" "$filename"
done
Bash 不喜欢空格,它喜欢 vars 周围的括号......无论如何,它看起来像这样(未经测试的代码):
for f in tmp* ; do
echo $f
zid=$(grep db $f)
if ! [ -e "$zid".mol2 ] ; then
filename="$zid".mol2
else
for ((n=1; n<11248; n++ )) ; do
if ! [ -e "$zid"_"$n".mol2 ] ; then
filename="$zid"_"$n".mol2
break
fi
done
fi
mv -v $f $filename
done