LinuxSir.Org  
| 网站首页 | 注册账号 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
精华主题  
主题工具
旧 03-07-06, 09:49 第 1 帖
Vel
 
Vel 的头像
 
 
注册会员  
  注册日期: Apr 2003
  我的住址: Wind Valley
  帖子: 2,582
  精华: 1
 

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


比如一个命令输出里面有3行
a
bbb
ccccccc

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

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

哪位能给个示范么,多谢了先。
  Vel 当前离线   回复时引用此帖
旧 03-07-06, 10:20 第 2 帖
lucida
 
 
 
注册会员  
  注册日期: Oct 2002
  我的住址: .:DRL:.
  帖子: 2,492
  精华: 9
 

用数组

$ 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[i]=$tempvar
echo "var[$i] = " ${var[i]};
i=$i+1;
done < $1
$ ./readval.sh rawdata.9
var[1] = val1
var[2] = val2
var[3] = val3
var[4] = val4
var[5] = val5








__________________
E6300@3.2G/P5B-D WiFi/2G RAM/1TB HDD/3540A/7900GT/E-MU 0404
Logitech S 510/MX Revolution/2407WFP/LaserJet 1020
go wild, go Gentoo

此帖于 03-07-06 10:22 被 lucida 编辑.
  lucida 当前离线   回复时引用此帖
旧 03-07-06, 12:27 第 3 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

逐行赋值给变量:
[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

不知道是否适合你的要求?
  KornLee 当前离线   回复时引用此帖
旧 03-07-06, 12:33 第 4 帖
lucida
 
 
 
注册会员  
  注册日期: Oct 2002
  我的住址: .:DRL:.
  帖子: 2,492
  精华: 9
 

javalee兄,你这样做只是echo,但是并没有赋值
就是说,a1/a2等等的内容还是为空
  lucida 当前离线   回复时引用此帖
旧 03-07-06, 12:37 第 5 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

嗷~~~,我再看看,不好意思~~~
看来还必须用数组的方法!

此帖于 03-07-06 12:44 被 KornLee 编辑.
  KornLee 当前离线   回复时引用此帖
旧 03-07-06, 14:04 第 6 帖
lucida
 
 
 
注册会员  
  注册日期: Oct 2002
  我的住址: .:DRL:.
  帖子: 2,492
  精华: 9
 

不用数组也可以啊,不过我觉得数组用起来比较清晰吧

$ export i=100
$ export a${i}=2
$ echo $a100
2
  lucida 当前离线   回复时引用此帖
旧 03-07-06, 15:14 第 7 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

逐行赋值:
[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兄指点,我想这样可以的吧~~

此帖于 03-07-06 17:24 被 KornLee 编辑.
  KornLee 当前离线   回复时引用此帖
旧 03-07-06, 17:45 第 8 帖
idkey
 
idkey 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 366
  精华: 1
 

javalee 的脚本里不用 echo,直接用 eval 就好了。
另外,如果原来的文件里就是
key=value
的模式的话,可以用 source file 的方式一次导入到环境变量中,霍霍,一句话就搞定了







__________________
我是 xyb 的马甲,呵呵

...."Have you mooed today?"...
  idkey 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 13:18


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2010, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2009, LinuxSir.Org