对于shell脚本编程特点来说它是
过程式编程语言、脚本类型语言、解释型语言。
在写脚本的时候总是会遵循三种执行结构:顺序执行结构、选择执行结构、循环执行结构。
顺序执行即:以从左到右,从上到下顺序执行所有的语句(命令)
选择执行结构:依照给定条件的逻辑判断结果或者依照可选的取值范围,进而选择某个分支中的语句来执行;
有if:分支选择标准;逻辑判断的结果;
case:分支选择标准;根据可选的取值;
循环执行结构:对于某特定语句,重复执行0次,1次或多次;
有for:遍历指定的列表
while:根据逻辑判断的结果
until:根据逻辑判断的结果
select:死循环,利用循环机制提供选择列表
----------------------------------------------------------
if结构通常来说有双分支和多分支结构
无非就是在if下又添加了elif 例如
if CONDITION1 ; then
STATEMENT
...
elif CONDITION2 ; then
STATEMENT
...
elif CONDITION3 ; then
STATEMENT
...
...
else
STATEMENT
...
fi
case 语句使用来 在给出不同的参数时做出不同的结果
case 变量引用 in
模式1)
分支1
;;
摸式2)
分支2
;;
...
*)
默认分支
;;
esac
在这里的模式可有很多种匹配方式
1.普通的文本字符
2.globbing风格的通配符
*:任意长度任意字符
?:任意的单个字符
[]:范围内的任意单个字符
[^]:范围外的任意单个字符
3.| :或
for 循环有两种格式
1.遍历列表
for VAAR_NAME in LIST ; do
循环体
done
这个列表LIST的可以:
1):直接写出
2): 纯整数列表
seq:输出一个整数列表
seq [FIRST [INCREMENT]] LAST
3) :花括号展开
{FIRST..LAST}
{0..100..3} 显示0-100中能被3整除的数字
4) : 命令的执行结果返回值
5):GLOBBING(通配符)
6): 某些变量的引用:[email protected],$*
2.控制变量的格式
for (( 表达式1; 表达式2; 表达式3 )); do
((循环体))
done
表达式1:为变量赋初始值
表达式2:循环的退出条件
表达式3:变量值的变换规律
while、until循环:
while CONDITION ; do
循环体
done
进入循环的条件:CONDITON一直为真;
退出循环条件:CONDITON为假
-------------------
until CONDITION ; do
循环体
done
进入循环的条件:CONDITON一直为假;
退出循环条件:CONDITON为真
注意:对于while和until两个循环结构来讲,如果要实施变量增量操作,必须手动给出;
例如:利用while和until循环结构,计算100以内所有整数和;
#!/bin/bash
#
declare -i I=1
while [ $I -le 100 ] ; do
let SUM+=$I
let I++
done
对于循环语句 还有一个无限循环的用法
while true ;do
循环体
done
until false ;do
循环体
done
在此类的循环结构中,必须适当的使用continue和break,以保证循环不会一直持续下去;
continue:
continue [n]
提前技术第n层的本次循环,直接进入下一轮条件判断,若符合循环进入条件,则开启下一轮循环;
break:
break [n]
提前结束第n层循环;不再继续后续循环;
还有一个实现遍历功能的while、until循环 用于对文件的每一行读取操作
while read LINES ; do
循环体
done < /PANTH/FROM/SOMEFILE
until ! read LINES ; do
循环体
done < /PATH/FROM/SOMEFILE
select
select循环主要用于创建一个菜单式列表,供用户进行选择;
列表是按照数字顺序排列的,我们只要选择数字即可;
一般来讲,select与case一起使用;
select是一个无限循环结构,因此,必须在循环体中使用break命令以退出循环,或者可以使用exit命令直接终止脚本。
select NAME [in 词语 ... ;] do 命令; done
select NAMl6E [in lsit ] ; do
命令
done
对于和用户交互式的命令read
read命令:
read [-a 数组] [-p 提示符] [-t 超时] [名称 ...]
名称一般为变量名或数组名;如果不写名称,则系统会将read读到的信息保存在REPLY变量中;
注意:在使用read命令的时候,通常会使用-t选项来规定超时时间;一旦使用-t选项定义了超时时间,我们必须在后面判断给定的变量是否为空,如果为空需要为变量提供默认值;
取随机数 8以内的
echo $[$RANDOM%8]