for NAME in LIST;do
done
列表生成方法
1){ start .. end }
$(seq start [[step]end] )
2)glob
/etc/rc.d/rc3.d/K*
3)命令
for i in {1..20;do}
ping -c 1 -w 1 ....&>/dev/null
return
done
while [ $i -le 100];do
let i++
done
i=1
until [ $i -gt 100 ]; do #为假则进入循环
let i++
done
循环控制语句
##################
continue [次数]: ##可以写次数,表示提前结束第几次循环,直接进入下一轮判断
while [] ; do
...
if [] ; then
continue
fi
...
done
break
#############
break []:
while [] ;do
..
if [] ;then
break
fi
..
done
例如
#########
#!/bin/bash
declare -i i=0
declare -i sum=0
until [ $i -gt 100 ]; do
let i++
if [ $[$i%2] -eq 1 ]; then
continue
fi
let sum+=$i
done
############
bash -n ..sh 语法检测一下
死循环:
while true;do
if [] ;then
break
fi
...
done
until false;do
..
done
###############
特殊用法
while read i;do
..
done < /file
依次读取file每一行,幅值给变量line
for ((i=0;i<=5;i++)); do
..
done
case支持glob风格通配符
*任意长度任意字符
?任意单个字符
[]指定范围内的任意单个字符
a|b a或b
string)
函数function
过程化编程:代码重用
模块化编程
结构化编程
语法1
function name {
}
语法2
name() {
}
return值 0成功 1-255失败
函数中局部变量定义
local name=value
函数递归:函数直接或间接调用自身
阶乘的递归:
############
#!/bin/bash
fa() {
if [ $1 -eq 0 -o $1 -eq 1 ];then
echo 1
else
echo $[$1*$(fa $[$1-1])]
fi
}
fact $@
###########
n阶斐波那契数列
##############
#!/bin/bash
fab() {
if [ $1 -eq 1 ];then
echo 1
elif [ $1 -eq 2 ];then
echo 1
else
echo $[ $(fab $[$1-1])+$(fab $[$1-2])]
fi
}
fab $@
##############
数组:存储多个元素的连续的内存空间
数组名
索引:编号从0开始
也可以支持使用自定义的格式,而不仅仅是数值格式
bash数组支持稀疏格式(比如1-10;其中456没有元素)
引用数组中的元素:${array[index]}
声明数组
declare -a ARRAY
declare -A ARRAY 关联数组;
幅值
a[0]="ff"
a=("1" "2" ...)
a=([0]="1" [3]="2" ...)
read array
引用数组 ${a[index]}
省略index表示引用下标0元素
所有元素 令index=* @
统计数组长度 ${#a[*]}
引用指定元素(数组切片)
${a[@]:2:3} 引用2-3个变量名
${a[@]:2} 显示2后面的所有元素
向数组中追加元素
array[${#array[*]}]
删除数组
unset array[index]
关联数组
declare -A array
array=([index_name1]='val1' [index_name2]='val2' ...)