LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4408|回复: 7

如何将一个输出中的若干行分别赋值给变量?

[复制链接]
发表于 2003-7-6 09:49:30 | 显示全部楼层 |阅读模式
比如一个命令输出里面有3行
a
bbb
ccccccc

分别赋值给变量a1,a2,a3,可以么?如果输出更多,创建的变量也相应越多?

还有,如何读取一个文本文件中的若干行呢,和上面一样,分别赋值,可以么?

哪位能给个示范么,多谢了先。
发表于 2003-7-6 10:20:17 | 显示全部楼层
用数组

$ cat rawdata.9
val1
val2
val3
val4
val5
$ cat readval.sh
#!/bin/bash

declare -i i;
i=1;
declare -a var;
while read tempvar; do
var=$tempvar
echo "var[$i] = " ${var};
i=$i+1;
done < $1
$ ./readval.sh rawdata.9
var[1] =  val1
var[2] =  val2
var[3] =  val3
var[4] =  val4
var[5] =  val5

发表于 2003-7-6 12:27:01 | 显示全部楼层
逐行赋值给变量:
[javalee//home/javalee/myshell]n=1
[javalee//home/javalee/myshell]while read line
> do
> echo "a$n=$(echo $line)"
> ((n+=1))
> done <tmp
a1=a
a2=bbb
a3=ccccccc
若干行赋值给变量:
[javalee//home/javalee/myshell]cat tmp                #后添了几行
a
bbb
ccccccc
sdfsaf
sadfasdf
asdfwe
wer
getyty
werwerwer
werwer
[javalee//home/javalee/myshell]c=1;n=1;m=3                #每3行赋值一个变量
[javalee//home/javalee/myshell]l=$(cat tmp|wc -l)
[javalee//home/javalee/myshell]while ((m<=$l))
> do
> echo "a$c=$(sed -n "${n},${m}p" tmp)"
> ((c+=1));((n+=3));((m+=3))
> done
a1=a
bbb
ccccccc
a2=sdfsaf
sadfasdf
asdfwe
a3=wer
getyty
werwerwer

不知道是否适合你的要求?;)
发表于 2003-7-6 12:33:49 | 显示全部楼层
javalee兄,你这样做只是echo,但是并没有赋值
就是说,a1/a2等等的内容还是为空
发表于 2003-7-6 12:37:17 | 显示全部楼层
嗷~~~,我再看看,不好意思~~~;)
看来还必须用数组的方法!
发表于 2003-7-6 14:04:47 | 显示全部楼层
不用数组也可以啊,不过我觉得数组用起来比较清晰吧

$ export i=100
$ export  a${i}=2
$ echo $a100
2
发表于 2003-7-6 15:14:58 | 显示全部楼层
逐行赋值:
[javalee//home/javalee/myshell]n=1
[javalee//home/javalee/myshell]while ((n<=$(cat tmp|wc -l)))
> do
> export a$n=$(cat tmp|sed -n "${n}p")
> ((n+=1))
> done
[javalee//home/javalee/myshell]echo $a10
werwer
[javalee//home/javalee/myshell]echo $a1 $a2
a bbb
多行赋值:
[javalee//home/javalee/myshell]num=1;from=1;to=3      
[javalee//home/javalee/myshell]while ((num<=$(cat tmp|wc -l)))
> do
> export var$num="$(cat tmp|sed -n "${from},${to}p")"
> ((num+=1));((from+=3));((to+=3));done
[javalee//home/javalee/myshell]echo $var1
a bbb ccccccc
[javalee//home/javalee/myshell]echo $var2
sdfsaf sadfasdf asdfwe
谢谢penny兄指点;),我想这样可以的吧~~
发表于 2003-7-6 17:45:22 | 显示全部楼层
javalee 的脚本里不用 echo,直接用 eval 就好了。
另外,如果原来的文件里就是
key=value
的模式的话,可以用 source file 的方式一次导入到环境变量中,霍霍,一句话就搞定了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表