我想编写一个脚本来提取部分数据文件并将其保存在不同的文件中。我写了一个脚本,但它给出了一些错误。脚本是
#!/bin/bash
nn=0
mn=0
for var1 in 1 2 3 ; do
nn=nn+2
mn=mn+302
sed -n '$nn','$mn'p dos.dat > $var1.dat
nn=mn
done
答案1
脚本的直接问题是变量是单引号的,阻止它们被 shell 扩展:
sed -n '$nn','$mn'p dos.dat > $var1.dat
也许你的意思是这样的
sed -n "$nn,${mn}p" dos.dat > $var1.dat
其中第二个变量用{
和分隔,}
将其与 分开p
。
另外,表达式语法也是一个问题。 “=”右侧的变量需要“$”来获取它们的值。如果不使用 '$((' 或 来处理它们expr
,右侧也只是一个字符串,而不是数字。
也许你的意思是这样的:
#!/bin/bash
nn=0 ; mn=0
for var1 in 1 2 3 ; do
nn=$(($nn+2))
mn=$(($mn+302))
sed -n "$nn,${mn}p" dos.dat > $var1.dat
nn=$mn
done
根据POSIX,其中的 '$'$((
是不必要的:任一都可以:
如果 shell 变量
x
包含形成有效整数常量的值,可选地包含前导加号或减号,然后是算术扩展"$((x))"
和"$(($x))"
应返回相同的值。