现在的位置: 首页 > 综合 > 正文

Linux Shell学习笔记八

2013年10月13日 ⁄ 综合 ⁄ 共 1876字 ⁄ 字号 评论关闭

第九学时  循环

基本语法:

while command

do

list

done

 

单行形式:

while command; do list; done

 

例如:

x=0

while [ $x -lt 10 ]

do

echo $x

x=$x+1

done

 

while循环最常用于检查是否正确得到用户的输入。

1)将一个变量值设为空。

2)当变量值不为空就启动一个存在的while循环。

3)在while循环中,询问用户问题并读入用户响应。

4)验证响应的正确性。

5)若响应无效,则变量值再次设为空,继续循环。

6)直到响应有效,变量值不变,退出循环。

例如:

RESPONSE=

while [ -z "$RESPONSE" ];

do

echo "Enter the name of a files"

read RESPONSE

if [ ! -d "$RESPONSE" ]; then

echo "ERROR:Please enter a pathname"

RESPONSE=

fi

done

 

11.2 for和select循环

11.2.1 for循环

Shell的for循环类似于PHP的foreach循环,元素个数决定了循环的次数。

格式:

for name in word1 word2 word3 ... wordN

do

list

done

当word1到wordN是被空格分开的字符序列。for循环每次执行时,变量name的值都设为单词清单中的下

一个单词。第一次name被设为word1,第二次被设为word2等等。

 

11.2.2 select循环

类似于PHP中的select case语句

格式:

select name in word1 word2 word3 ... wordN

do

list

done

这里name是变量名,word1到wordN是由空格分开的字符或单词序列。

用户做选择后执行的命令集合由list指定。

select循环的执行过程如下:

1)list1中的每一项都和一个数字一起显示。

2)显示一个提示符,通常为#?。

3)当用户输入一个值时,$REPLY被赋予该值。

4)若$REPLY包含许多所显示的项,则name所制定的变量赋值为list1中被选的项,否则list1中的项再次显示。

5)当做了有效选择后,执行list2

6)若list2没有使用循环控制机制从select循环中推出,则整个过程从第一步重新开始。

 

select COMPONENT in comp1 comp2 comp3 all none

do

case $COMPONENT in

comp1|comp2|comp3) CompConf $COMPONENT ;;

all) CompConf comp1

    CompConf comp2

    ;;

none) break;;

*) echo "ERROR";;

esac

done

 

 

11.3 循环控制

1.break

2.continue

11.3.1 无限循环和break命令

交互式脚本:

while:

do

read CMD

case $CMD in

[qQ]|[qQ][uU][iI][tT]) break;;

*) precess $CMD ;;

esac

done

 

11.3.2 continue命令进入下一次循环

 

 

 

第十学时  参数

在Unix中,激活一个命令的一般格式是:

command options files

这里,command是命令名,options是指定的选项,files是命令应该操作的选出的文件清单。

例如:$ls -l *.doc

Shell脚本中应该坚持使用这种格式,以选项的形式作为参数。

 

处理传给shell脚本的选项的最常用方式有两种:

1)使用case语句手工处理选项。

2)使用getopts命令处理选项。

对于只有一、两个选项的脚本建议使用case语句工作。

对于参数很多的,并且可以任意组合的,建议getopts,因为该命令在语法分析选项时有很大的灵活性。

 

12.1 特殊变量

变量 描述

$0 正在被执行命令的名字。对于Shell脚本而言,这是被激活命令的路径

$n 该变量与脚本被激活时所带的参数相对应。第一个参数为$1,第二个参数为$2

$# 提供给脚本的参数号

$* 所有参数都被双引号引住。若一个脚本接收两个参数。$*等于$1$2

$@ 所有参数都被双引号引住。若一个脚本接收两个参数。$*等于$1$2

$? 前一命令执行后的退出状态

$$ 当前shell的进程号。对于Shell脚本,这是其正在执行的进程ID

$! 前一个后台命令的进程号

 

12.2 选项和参数

可以在命令行给出选项以便改变脚本或程序的行为。

命令的参数是指:在命令行中所有在命令名后出现的字符串或单字。

而选项是指命令行行为的参数。

例如:

$ ls -aF fruit

命令为ls,参数为-aF和fruit.命令的选项是-aF

抱歉!评论已关闭.