扫一扫
分享文章到微信

扫一扫
关注官方公众号
至顶头条
作者: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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。