科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

命名管道是一种先进先出(FIFO)的数据结构,它允许两个进程通过管道联接实现信息交换......

作者:蓝色键盘 来源:天极论坛 2007年10月28日

关键字: Linux

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

  “.”点命令是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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

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