中 Unix系列shell程序编写( 四 )


输入:Hello my frIEnd

$echo $var1 $var2 $var3
结果显示:Hello my friend
$echo $var2
结果显示:my下面用个read和case的例子结束本部分的学习:#--交互式备份,恢复程序
echo "输入要备份文件所在目录:c"
read WORKDIR
if [ !-d $WORKDIR ]
then
echo "Sorry,$WORKDIR is not a Directory"
exit 1
fi
cd $WORKDIR
echo "输入选择:"
echo _
echo "1.恢复到 $WORKDIR"
echo "2.备份 $WORKDIR"
echo "0.退出"
echo
echo "c"
read CHOICE
case "$CHOICE" in
1)echo "恢复中... ..."
cpio -i < /dev/mnt0
2)echo "备份中... ..."
ls | cpio -o > /dev/mnt0
0)exit 1
*)exit 1
esac
if [ $? -ne 0 ]
then
echo "程序运行中出现错误!"
else
echo "操作成功!"
fi

在上面代码中,"*"定义了其他模式下不匹配时的默认操作 。

循环语句前面介绍的程序和所学的语句都是从头到尾成一条主线下来,或是成分支结构,在日常管理Unix的过程中,经常要重复的做一些操作,处理批量的问题,这就涉及到了循环结构,同高级语言相似,UNIX的Shell也提供了强大的循环处理语句 。Bsh语言中有三种循环语句-while循环、until循环、for循环,下面通过具体的例子分别介绍这三种结构 。While循环在while循环语句中,当某一条件为真时,执行指定的命令 。语句的结构如下:while command
do
command
command
… …
done示例代码如下:#测试while循环小程序x_t=1
while [ $x_t -lt 5 ]
do
mm=` expr $x_t * $int `#注意""的作用
echo "$mm"
x_t=` expr $x_t1 ` #注意expr的用法
done
echo "THE WHILE IS END!n"程序的执行结果如下:
1
4
9
16
THE WHILE IS END在上述程序中,当变量x_t的值小于5的时候,执行while循环中的语句 。在第五次循环时, [ $x_t-lt5]命令返回非零值,于是程序执行done后面的代码 。
现在利用while循环,可以改进我们早些时候用的备份数据的例子,当用户指定的目录备份完毕后,使用while循环使程序执行一次可以备份多个用户指定的目录 。代码如下:echo "欢迎使用备份小程序"ANS=Y
while [ $ANS = Y -o $ANS = y ]
do
echo _
#读目录名
echo "输入要备份的目录名:c"
read DIR
if [ ! -d $DIR ]
then
echo "$DIR不是一个目录!"
exit 1
fi
cd $DIR
echo "请选择:"
echo _
echo "1 恢复数据到 $DIR"
echo "2 备份$DIR的数据"
echo
echo "请选择:c"
read CHOICE
case "$CHOICE" in
1) echo "恢复中… …"
cpio -i2) echo "备份中… …"
cpio -o >/dev/rmt0
*) echo "选择无效"
esac
if [ $? -ne 0 ]
then
echo "cpio执行过程中出现问题"
exit 2
fi
echo "继续别的目录吗?(Y/y)c"
read ANS
done在程序开始,我们给变量ANS符值为Y,根据whlie的判断条件,程序进入while循环,执行do-done中的语句,每次循环都要求用户输入ANS的值用来判断是否进行下次重复执行do-done中的语句 。如果用户输入的条件不满足while语句条件,循环结束,程序执行done后面的语句 。

推荐阅读