数组
变量:内存的存储空间;
变量的特点:每个变量中只能存放一个数据,变量只能进行一次性的赋值;
存放本班每个人的名字于变量:
1.一次性赋值:
NAME="name1 name2 name3 ..."
2.使用多个变量,分别赋值:
NAME1=xu
NAME2=shen
3.数组变量:
数组:存放一个或多个元素的连续的内存空间;相当于多个变量的集合;
数组元素:数组中任何一个存放数据的存储单元;
数组的索引:
1.数字:索引数组(Index ARRAY)
0,1,2,...
2.名称(字符串):关联数组(Related ARRAY)
bash4.0以上的版本才支持;
稠密数组和稀疏数组:
稠密数组:索引编号必须连续
稀疏数组:索引编号可以不连续,bash数组属于此类;
声明数组:
1.declare命令
declare -i NAME:将NAME声明为整型变量;
declare -x NAME:将NAME声明为环境变量;
declare -a NAME:将NAME声明为索引数组(如果支持);
declare -A NAME:将NAME声明为关联数组(如果支持);
declare -a NAME=("value1" "value2" "value3" ...)
declare -a NAME=([0]="value1" [1]="value2" [5]="value3" ...)
2.直接声明数组:
直接为数组赋值:
ARRAY_NAME=("value1" "value2" "value3" ...) 声明稠密数组;
ARRAY_NAME=([0]="value1" [1]="value2" [5]="value3" ...) 声明稀疏数组;
3.定义数组的元素而创建数组:
ARRAY_NAME[0]=value1
ARRAY_NAME[1]=value2
...
引用数组中元素:
引用变量的方法:${NAME}
引用数组元素的方法:${ARRAY_NAME[INDEX]}
注意:如果不给出INDEX,则表示引用数组的第一个元素,即INDEX=0的元素;
引用整个数组的所有元素:${ARRAY_ANME[*]}或者${ARRAY_ANME[@]}
引用数组的索引:${!ARRAY_ANME[*]}或者${!ARRAY_ANME[@]}
查看数组的长度(数组中有效元素的个数)
${#ARRAY_NAME[*]} 或者 ${#ARRAY_NAME[@]}
数组切片:
${ARRAY_NAME:offset}:显示包括offset数字所表示的索引位置及以后的所有元素;
${ARRAY_NAME:6}:跳过0-5,从6开始显示
${ARRAY_NAME:offset:number}:显示包括offset数字所表示的索引位置及以后的number个元素;${ARRAY_NAME:6:3}:跳过0-5,从6开始显示3个元素;
想数组中追加元素:
1.稠密数组:
ARRAY_NAME[${#ARRAY_NAME[*]}]=valueN
0 1 2 3 4 5 6 7
2.稀疏数组:
ARRAY_ANME[INDEX]=valueN
注意:INDEX必须为未被使用的数组元素索引编号;
撤销数组:
usnet ARRAY_NAME
删除数组中的元素:
unset ARRAY_NAME[INDEX]
RANDOM变量:0-32767
熵池
/dev/random
/dev/urandom
bash脚本编程:
写一个脚本:
创建一个用户alice,如果该用户已经存在,就提示用户已经存在的信息;否则将创建用户;
shell脚本编程的特点:
过程式编程语言
脚本类语言
解释型语言
过程式编程语言:
顺序执行结构:
以从左到右,从上到下顺序执行所有的语句(命令)
shell脚本的主体结构;
选择执行结构:
依照给定条件的逻辑判断结果或者依照可选的取值范围,进而选择某个分支中的语句来执行;
if:分支选择标准:逻辑判断的结果;
case:分支选择标准:根据可选的取值;
循环执行结构:
对于某特定语句,重复执行0次,1次或多次;
for:遍历指定的列表;
while:根据逻辑判断的结果;
until:根据逻辑判断的结果;
select:死循环,利用循环机制提供选择列表;
选择执行结构:
if语句:
if 命令; then 命令; [ elif 命令; then 命令; ]... [ else 命令; ] fi
if语句单分支结构:如果条件为真,则执行then后的命令,否则,不做任何操作;
if CONDITION
then STATEMENT
fi
if CONDITION ; then
STATEMENT1
STATEMENT2
...
fi
注意:想要执行then后面的STATEMENTS,前提条件是CONDITION部分为真;
if语句的双分支结构:如果条件为真,就执行then后面的命令;否则就执行else后面的命令;
if CONDITION ; then
STATEMENT
...
else
STATEMENT
...
fi
if语句的多分支结构:首先判断CONDITION1是否为真,如果为真,则执行第一个then后面的语句;否则就判断CONDITION2是否为真,如果为真,就执行第二个then后面的语句;否则就判断CONDITION3是否为真,如果为真,就执行第三个then后面的语句...;如果所有的CONDITION都为假,就执行else后面的语句;
if CONDITION1 ; then
STATEMENT
...
elif CONDITION2 ; then
STATEMENT
...
elif CONDITION3 ; then
STATEMENT
...
...
else
STATEMENT
...
fi
建议:if多分支结构,能不用就不用;