简单if结构
if expression
then
command
command
fi
在使用这种简单if结构时,要特别注意测试条件后如果没有";",则then语句要换行,否则会产生错误。如果
if和then在同一行必须有“;”隔开
if/else结构
命令式双向选择语句,当用户执行脚本时如果不需要满足if后的表达式也会执行else后的命令 起结构为:
if expression1
then
command
else
command
fi
if/elif/else
if/elif/else结构针对某一事件多种情况进行处理.通常表现为"如果满足某种条件,则进行某种处理,直到找到满足的条件,然后执行相应处理其语法
为:
if expression
then
command
elif expression
then
command
.......
else
command
fi
case和if/elif/else结构一样,case结构可用于多分支选择语句
case variable in
value 1) ----当value=variable时 就会执行value的语句
command
........
;;
value 2)
command
.....
;;
*) ------如果value都没和variable想等的 就则行此条语句
command
.......
;;
esac
case $变量名称in <==关键字为 case ,还有变数前有钱字号
"第一个变数内容") <==每个变数内容建议用双引号括起来,关键字则为小括号 )
程式段
;; <==每个类别结尾使用两个连续的分号来处理!
"第二个变数内容")
程式段
;;
*) <==最后一个变数内容都会用 * 來代表所有其他值
不包含第一个变数内容与第二个变数内容的其它程式执行段
;;
esac <==最终 case 结尾
列表for循环
列表for循环语句用于将一组命令执行已知次数,下面给出for循环的基本格式:
for variable in {list}
do
command
command
.....
done
其中do和done之间的命令称为循环体,执行次数和list列表中常数或字符串的个数相同。
当执行for循环时,首先将in后的list列表的第一个常数或字符串赋值给循环变量,然后执行循环体;接着将list列表中的第二个常数或字符串赋值给循环变量,再次执行循环体,这个过程将一直持续到list列表中无其他的常数或字符串,然后执行done命令后的命令序列。
不带列表for循环
不带列表for循环执行时由用户指定参数和参数的个数,下面给出for不带列表for的基本格式
for variable
do
command
command
done
其中do和done之间命令为循环体,Shell会自动的将命令行键入的所有参数依次组织成列表,每次将一个命令行键入的参数显示给用户,直至所有的命令行中的参数都显示给用户。
例子:
#!/bin/bash
for a
do
echo $a
done
./for.sh 10 9 8 7
10
9
8
7
类C风格的for循环(1)
类C风格的for也可被称为计次循环,一般用于次数已知情况,下面给出累C的格式
for (( expr1;expr2;expr3 ))
do
command
done
例子
for (( i=0;i<=10;i++)
do
echo $i
done
类C风格的for循环(2)
对类C风格的for循环结构的解释:
其中表达式expr1为循环变量赋初值的语句
表达式expr2决定是否进行循环的表达式,当判断expr2退出状态为0执行do和done之间的循环体,当退出状态为非0时将退出for循环执行done后的命令
表达式expr3用于改变循环变量的语句
类C风格的for循环结构中,循环体也是一个块语句,要么是单条命令,要么是多条命令,但必须包裹在do和done之间。
while循环语句也称前测试循环语句,它的唇环重复执行次数,是利用一个条件来控制是否继续重复执行这个语句。while语句与for语句相比
,无论是语法还是执行的流程,都比较简明易懂。while循环格式:
while expression
do
command
command
done
while循环语句之所以明明为前测试循环,是因为他要先判断此循环的条件是否成立,然后才作重复执行的操作。也就是说,while循环
语句执行过程是,先判断expression的退出状态,如果为0,则执行循环,否则退出循环
计数器控制的while循环
假定该种情形是在已经准确知道要输入的数据或字符串的数目,在这种情况下可采用计数器控制的while循环结构来处理。这种情形下while循环的格式如下所示:
counter = 1
while expression
do
command
…
command
…
done
结束标记控制的while循环
在Linux Shell编程中很多时候不知道读入数据的个数,但是可以设置一个特殊的数据值来结束while循环,该特殊数据值称为结束标记,其通过提示用户输入特殊字符或数字来操作。当用户输入该标记后结束while循环,执行done后的命令。在该情形下,while循环的形式如下所示:
read variable
while [[ "$variable" != sentinel ]]
do
read variable
done
标志控制的while循环
标志控制的while循环使用用户输入的标志的值来控制循环的结束,这样避免了用户不知到循环结束标记的麻烦。在该情形下,while循环的形式如下所示:
signal=0
while (( signal != 1 ))
do
…
if expression
then
signal=1
fi
done
命令行控制的while循环
有时需要使用命令行来指定输出参数和参数个数,这时用其他的三种形式的while循环是无法实现的,所以需要使用命令行控制的while循环。该形式下,while循环通常与shift结合起来使用,其中shift命令使位置变量下移一位(即$2代替$1,$3代替$2),并且使$#变量递减,当最后一个参数也显示给用户后,$#就会等于0,同时$*也等于空,下面是该情形下,while循环的形式为:
while [[ "$*" != "" ]]
do
echo "$1"
shift
done …
until循环
在执行while循环时,只要是expression的退出状态为0将一直执行循环体。until命令和while命令类似,但区别是until循环中expression的退出状态不为0将循环体一直执行下去,直到退出状态为0,下面给出了until循环的结构:
until expression
do
command
command
…
done
嵌套循环
一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。在外部循环的每次执行过程中都会触发内部循环,直至内部完成一次循环,才接着执行下一次的外部循环。for循环、while循环和until循环可以相互嵌套。
break循环控制符
break语句可以应用在for、while和until循环语句中,用于强行退出循环,也就是忽略循环体中任何其他语句和循环条件的限制。
continue循环控制符
continue循环控制符应用在for、while和until语句中,用于让脚本跳过其后面的语句,执行下一次循环。
select结构
Select是bash的扩展结构,用于交互式菜单显示,用于从一组不同的值中进行选择,功能有点类似于case结构,但其交互性要比case好的多,其基本结构为:
select variable in {list}
do
command
…
break
done