扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者: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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者