ksh协作进程
时间:2007-08-30 来源:llsx
协作进程是一个特殊的双向管道,允许shell脚本程序向另一个命令的标准输入写数据,或从它的标准输出读取数据。在命令后附加|&就可以讲命令初始化成一个协作进程。协作进程的读(read)写(print)需加p选项。下边是是一个实例(bc算术计算):
OpenBSD%vim test.sh
#!/bin/ksh
cat <<EOF
************************
ksh test
************************
EOF
bc |& # 初始化协作进程
while true
do
print 'select operators'
cat <<EOF
a) +
b) -
c) *
d) /
e) ^
EOF # 运算符
read op # 读取用户输入
case $op in
a) op="+";;
b) op="-";;
c) op="*";;
d) op="/";;
e) op="^";;
*)
continue;
esac
print -p scale=3 # 将输入的字符串"scale=3"通过管道传给协作进程bc,print的输出为bc命令的输入。
print 'Enter two number'
read n1 n2 # 读取用户输入的数字
print -p "$n1" "$op" "$n2" # print -p 向协作进程发送算术表达式。
read -p reslut # read -p 从协作进程读取输出
print $reslut
print -n 'Contine(y/n)?'
read answer
case $answer in
[Nn]*)
break;;
esac
done
print 'Bye-bye'
OpenBSD%ksh test.sh
************************
ksh test
************************
select operators
a) +
b) -
c) *
d) /
e) ^
a
Enter two number
12 3
15
Contine(y/n)?n
Bye-bye
OpenBSD%
OpenBSD%vim test.sh
#!/bin/ksh
cat <<EOF
************************
ksh test
************************
EOF
bc |& # 初始化协作进程
while true
do
print 'select operators'
cat <<EOF
a) +
b) -
c) *
d) /
e) ^
EOF # 运算符
read op # 读取用户输入
case $op in
a) op="+";;
b) op="-";;
c) op="*";;
d) op="/";;
e) op="^";;
*)
continue;
esac
print -p scale=3 # 将输入的字符串"scale=3"通过管道传给协作进程bc,print的输出为bc命令的输入。
print 'Enter two number'
read n1 n2 # 读取用户输入的数字
print -p "$n1" "$op" "$n2" # print -p 向协作进程发送算术表达式。
read -p reslut # read -p 从协作进程读取输出
print $reslut
print -n 'Contine(y/n)?'
read answer
case $answer in
[Nn]*)
break;;
esac
done
print 'Bye-bye'
OpenBSD%ksh test.sh
************************
ksh test
************************
select operators
a) +
b) -
c) *
d) /
e) ^
a
Enter two number
12 3
15
Contine(y/n)?n
Bye-bye
OpenBSD%
相关阅读 更多 +