科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件Shell实现Unix进程间信息交换的几种方法

Shell实现Unix进程间信息交换的几种方法

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文介绍在SCO OpenServer5.0.5系统中使用shell语言来实现进程间信息交换的几种方法

作者:ChinaITLab 来源:ChinaITLab 2007年9月15日

关键字: 软件

  • 评论
  • 分享微博
  • 分享邮件
三、使用点命令“.”

“.”点命令是shell的一个内部命令,它从指定的shell 文件中读入所有命令语句并在当前进程中执行。 因此当多个shell进程(父子进程或无关进程均可)共享一组变量值时,就可以将这些变量赋值语句定义到一个shell文件里,并在需要这些变量值的程序中使用点语句来引用这个shell文件,从而实现变量值共享(对这些变量值的修改仅涉及到这个shell文件)。但要注意的是,这个shell文件不能包括含有位置参数的语句,即不能接受$1、$2等命令行参数。 

下面是一个在超市中发布每日商品价格的示范程序片段。发布每日商品价格统一由程序/tmp/jiage来执行,它为每种商品价格赋值,并把相应的赋值语句写入文件/tmp/jiagebiao中。在各终端上运行的收款程序/tmp/shoukuan将读入文件 /tmp/jiagebiao中所有赋值语句并在当前进程中执行,从而获取在程序/tmp/jiage中设定的价格。 

价格设定程序/tmp/jiage: 

echo “Enter the price of chicken,

  duck and fish: \c"

read chicken duck fish

exec 3>/tmp/jiagebiao

echo “chicken_price=$chicken" >&3

echo “duck_price=$duck" >&3

echo “fish_price=$fish" >&3

执行/tmp/jiage程序后,文件/tmp/jiagebiao中将有如下内容: 

chicken_price=5.4

duck_price=2.5

fish_price=4.2

收款程序/tmp/shoukuan: 

. /tmp/jiagebiao

count=0

while :

do

echo “Enter the trade name and

 quantities or input q to sum: \c"

read trade$count quantity$count

eval a=\$trade$count

if [ “$a" = “q" ]

then if [ $count -gt 0 ]

then

count=‘expr $count - 1’

fi

break

fi

count=‘expr $count + 1 ’

done

echo “\n‘date’"

echo “trade name\tquantity\tsum"

while [ “$count" -ge 0 ]

do

 eval trade=“\${trade$count}"

 eval trade_price=“${trade}_price"

 eval danjia=\${$trade_price}

 eval quantity=“\${quantity$count}"

 sum=‘echo “scale=2; $danjia

 *$quantity"|bc’

 echo “$trade\t\t$quantity\t\t$sum"

 count=‘expr $count - 1 ’

done

在终端上执行程序/tmp/shoukuan将有如下显示: 

Enter the trade name and quantities

or input q to sum: chicken 2

Enter the trade name and quantities

or input q to sum: fish 3

Enter the trade name and quantities

or input q to sum: duck 4

Enter the trade name and quantities 

 or input q to sum: q

Thu Jan 28 09:29:29 BJT 1999:

duck 4 10

fish 3 12.6

chicken 2 10.8

四、使用export语句

通常shell变量是局部变量,无论是通过赋值操作还是通过命令赋值,其变量值只在当前进程中有效。但是经过export语句说明的shell变量就成为一个全局性变量,其变量名和变量值可以传递给子进程及其后代进程。在子进程中可以修改这个变量的值,但并不影响这个变量在父进程中的取值。 

下面的例子中,父进程(/tmp/text)将赋值后的变量 pro_name传递给子进程(/tmp/text_child),在子进程中对变量pro_name所赋的新值并不影响父进程中该变量的值。 

/tmp/text程序:

pro_name=“PARENT"

echo “The variable pro_name is

$pro_name in parent process"

export pro_name

/tmp/text_child

echo “The variable pro_name is

$pro_name after retund to parent process"

/tmp/text_child程序:

echo“The variable pro_name ($pro_name) is

 transmited to child process"

pro_name=“CHILD"

echo “To change the variable pro_name to 

  $pro_name in child process"

执行程序/tmp/text:

$ /tmp/text

The variable pro_name is PARENT in parent process

The variable pro_name (PARENT)

is transmited to child process

To change the variable pro_name to CHILD in child process

The variable pro_name is PARENT after retund to parent process

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章