目录
for循环语句
for 变量 in 取值列表 # 取值列表
do 1 2 3 4 5 或 {1..5} 或 $(seq 1 5) 或 $(cat $文件变量)
命令序列
....
done
for ((变量=初始值; 变量范围; 变量的迭代方式))
for ((i=1; i<=10; i++))
do
命令序列
....
done
for循环实现多线程
for ((i=1; i<=10; i++)) #将每次循环的进程都放入后台自行运行
do
{ #等待上面所有循环的进程都执行完毕后再执行后面的命令命令序列
命令序列
....
}&
done
wait
while循环语句
while [ 条件表达式 ]
while test 条件表达式 #条件成立时才会循环执行do里面的命令序列
while 命令行 &> /dev/null
do
命令序列
....
变量的迭代方式
done
例
a=1
while [ $a -le 10 ]
do
echo $a
let a++
done
cat 文件 | while read 变量 #从文件读取行内容循环
do
命令序列
....
done
while read 变量
do
命令序列
....
done < 文件
until循环语句
until [ 条件表达式 ]
until test 条件表达式 #条件不成立时才会循环执行do里面的命令序列
until 命令行 &> /dev/null
do
命令序列
....
变量的迭代方式
done
例
a=1
while [ $a -ge 10 ]
do
echo $a
let a++
done
多层循环
通过for循环实现双循环
通过while循环实现双循环
九九乘法表
循环退出
- exit:退出脚本进程 exit N:还可以指定脚本退出的状态返回码
- break:跳出单个循环 break 2:跳出2层循环
- continue:中止本次循环中的其它命令执行,但不会完全中止整个循环运行
shell函数
shell函数定义
1.function 函数名{ 2.函数名() {
命令序列 命令序列
} }
函数返回值
return:表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值
使用原则:
- 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
- 退出状态码必须是0~255,超出时值将为除以256取余
function db1 {
read -p "请输入:" value
return $[$value * 2]
}
db1
echo $?db1() {
read -p "请输入:" value
echo $[$value * 2]
}
result=`db1`
echo $result
函数传参
1. sum1() { 2.sum2() {
sum=$[$1 + $2] sum=$[$1 + $2]
echo $sum echo $sum } }
read -p "输入第一个参数:" first sum2 $1 $2
read -p "输入第二个参数:" second
sum1 $first $second
递归
函数调用自己本身的函数
阶乘
fact() {
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
# 5 * $result(4*$result(3*$result(2*$result(1))))
fi
}
read -p "请输入:" n
result=$(fact $n)
echo $result
递归目录
function list_files {
for f in `ls $1`
do
if [ -d "$1/$f" ]
then
echo "$2$f"
list_files "$1/$f" " $2"
else
echo "$2$f"
fi
done
}list_files "/var/log" ""
创建库
vim myfuncs.sh
jiafa() {
echo $[$1 + $2]
}chengfa() {
echo $[$1 * $2]
}chufa() {
if [ $2 -ne 0 ];then
echo $[$1 / $2]
else
echo "$2不能为0"
fi
}
vim test.sh
. myfuncs.shvalue1=10
value2=5
result1=`jiafa $value1 $value2`
result2=`chengfa $value1 $value2`
result3=`chufa $value1 $value2`
echo "加法结果为:$result1"
echo "乘法结果为:$result2"
echo "除法结果为:$result3"