函数就是一个功能
定义函数:描述一个功能的过程
[function] 函数名()
{
command1
......
}
调用函数:执行一次函数:
函数名 实参1 实参2 实参3…
函数中接受实参:$1 $2 $3…>> shell变量
$# 传递实参的个数
$@引用所有的实参
f(x)=3x+2 f(2)=3*2+2=8
返回值:return 字符串
调用函数时,若有返回值,通过$?来获取
注:只有1byte的宽度<=255,因为shell一般只用于配置,功能函数一般只返回true或false
递归:自己调用自己
本质:when从什么时候开始 when到什么时候结束what每次递归需要干嘛
eg:打印1-100 从1开始,到一百结束,每次打印当前数字
shell是一门弱语言
shell并不关心此串是什么,如果需要进行数学计算,必须用expr,let等等命令来辅助计算。
shell变量:
局部变量:在shell代码中定义的变量,都称作局部变量(用户变量) (小写)
环境变量:用户经常需要用到某些值时,shell将这些值定义为全局变量(大写)
$num $1第一个实参
$?代表上一个函数或上一个命令的返回值
文件流:向该文件写入信息的接口 ->a.txt
流重定向:将当前的文件流改变到其他文件中
>(截断长度为0)
>>(追加到文件末尾)
屏幕(没有缓冲,不能显示内容):/dev/null
练习:
1,打印n-m区间的数字,并求出n-m区间总和
# !/bin/bash
read -p "输入左区间" left
read -p "输入右区间" right
sum=0
function add()
{
for var in `seq $1 $2`
do
echo "$var"
sum=`expr $var + $sum`
done
printf "$sum"
}
add $left $right
3,求m(4位数),逆序打印
# 1/bin/bash
read -p "请输入一个4位数" num
a=`expr $num % 10`
b=`expr $a % 10`
c=`expr $b % 10`
d=`expr $c % 10`
e=`expr $d \* 1000 + $c \* 100 + $b \* 10 + $a`
echo "$e"
4,求192.168.8.141~192.168.8.254区间的主机是否在线
4.1求当前用户有多少用户?
# !/binbash
#192.168.8.141~254
online=0
for ip in `seq 141 254`
do
ping -c 2 -i 0.2 "192.168.8.${ip}" >> /dev/null
if test $? -eq 0
then
online=`expr $online + 1` #统计在线人数,每返回一个在线online+1
echo "192.168.8.${ip}在线" >> online.date #将输出信息“追加”到此文件中
fi
done
echo "正在查找请多等一会,查看信息请到查看online.date"
echo "一共有${online}在线"
6.改进第四题
7,打印100-1(函数调用)
# !/bin/bash
function dy()
{
for var in `seq 1 100`
do
echo "$var"
done
}
echo "开始调用dy函数"
dy
/打印100~1(用了函数递归的思想)(默写)
# !/bin/bash
function dg()
{
if test $1 -eq 0
then
return
fi
echo "$1"
dg `expr $1 - 1`
}
dg 100
8.9.遍历某层文件,遍历深层次文件
# !/bin/bash
function list()
{
for var in `ls $1` #ls为shell遍历命令,$1为输入的路径(path)的实参
do
if test -d $1/$var
then
echo "-d ${var}是文件夹"
list ${1}/${var} #调用函数,(自己调用自己),递归思想
else
echo "-- $var这不是文件夹"
fi
done
}
read -p "请输入路径,开始遍历:" path
list $path #调用函数
运行结果
10.遍历某层路径下的某个文件是否存在?
运行
11,将某路径下所有tmp开头的文件或目录移动到指定位置