一、for循环
for 变量 in 列表
do
代码
代码
......
done
循环的逻辑:
将列表中的每个元素逐一复制给变量
每赋值一次,do和done之间的代码就会执行一次
列表的生成方式
方法1:直接给出列表元素【用空格分割多个元素】
1 33 12 9 haha baidu
方法2:用通配符来生成元素
/home/a*
方法3:用命令来生成元素
ls /etc/
方法4:用()展开的形式生成元素
{3..7} {a..e}
案例:
输出1-100之间的数字
#!/bin/bash
do
echo $num
sleep 0.5 #延迟0.5秒
done
另一种格式::#!/bin/bash
for ((i=0;i<=100;i++))
do
echo $i
done
案例2: 检查172.16.100.1-10 在线主机
#!/bin/bash
for i in {1..10}
do
ipaddress="172.167100.$i"
if ping -W1 -c1 $ipaddress &> /dev/null ;then
echo "$ipaddress is up"
else
echo "$ipaddress in down"
fi
done
生成字符串列表
#!/bin/basj
for xxx in {a..f}
do
touch /tmp/$xxx.txt
done
生成文件名列表
案例:输出/etc下,每个文件名
for fileName in `ls /etc/`
do
echo $fileName
sleep 0.5
done
#这样只会输出文件名 用通配符的会输出绝对路径 /etc/*
案例2:判断/etc下每个文件的文件类型
for fileName in `ls /etc`
do
if [ -f $fileName ];then
echo "$fileName 是 一般文件"
elif [ -d /etc/$fileName ];then
echo "$fileName 是 目录文件"
else
echo "$fileName 是 其他类型文件"
fi
sleep 0.5
done
二、while 循环
while循环格式
格式1: 正常循环格式
while 条件
do
代码
代码
done
格式2:读取文件格式
while read line
do
代码
代码
done<文件名
案例:输出/etc/passwd中每行有多少个字符,要求显示结果是 第x行,有x个字符
#!/bin/bash
m=1
while read line
do
nums=`echo $line | wc -c`
echo "第 $m 行有 $nums 个字符"
m=$[$m+1]
done</etc/passwd
案例2:每隔5s检查一次jerry是否登陆系统
#!/bin/bash
while true
do
sleep 5
if who | grep "^jack\>" &>/dev/null;then
echo "jack is online"
exit 5
else
echo "jack is offline"
fi
done
who 命令 用来显示当前登录系统的用户信息
循环控制
break: 终止循环-直接跳出循环
continue: 立刻终止这次循环,直接开始下一次循环
案例:写99乘法表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
#!/bin/bash
for ((i=1;i<=9;i++))
do
for((j=1;j<=i;j++))
do
num=$[$i+$j]
echo -n "$j+$i=$num "
done
echo
done
三、函数
简介
函数就是一段代码
通过使用函数可以实现代码的复用,降低代码的冗余度,提高开发效率
定义函数的格式
函数名()
{
代码代码
}
函数必须调用才能运行
调用的函数的格式
函数名
内置函数库
/etc/init.d/functions
记载/引入函数库
source
.
Linux中服务管理脚本的路径
/etc/rc.d/init.d
使用自己的函数库
首先创建一个函数库文件;funlab
show_menu()
{
echo "1) 检查内存"
echo "2)检查磁盘"
echo "3)检查用户"
echo "4)退出系统"
}
checkMem()
{
echo "内存检查结束"
}
然后i在shell脚本中调用函数库中的函数
#!/bin/bash
. /tmp/funlab
echo "start"
show_menu
echo "stop"
函数的输出和返回
函数的输出结果
在函数中通过执行echo,向外输出内容
函数的返回结果
用return XXX进行返回【return的值必须是数值类型】
返回结果默认是不会显示出来的
通常来说,在程序中,需要用一个变量来接收函数的返回结果
return执行到这里的时候,函数就是终止
四、变量
类型
环境变量:Linux内置的变量
自定义变量:用户自己定义的变量
位置变量:用于向脚本/函数传递参数
环境变量
一般环境变量都是大写的
set env 俩个命令都可以查看环境变量
PATH : 定义搜索命令的路径
USER: 当前用户的用户名
HOME:当前用户的家目录
PS1:当前用户的提示符
PS2:当前用户的续行符
SHELL:当前用户的shell类型
UID:当前用户的uid
环境变量配置文件
用户环境变量配置文件
在用户家目录下, .bashrc .bash_profi;e
系统环境变量配置文件
在/etc下 bashrc 和 profile
修改环境变量
临时:修改PATH变量,将tmp添加到path变量中
export PATH-$PATH:/tmp/
永久:修改环境变量配置文件
vim /etc/bashrc
最后一行添加
export PATH=$PATH:/home
让当前会话生效
source /etc/bashrc
位置变量
位置变量:也称之为位置参数
作用是用于函数或者脚本传递参数的
接收数据的位置变量是 $0 $1 $2 $3 $#
$# 参数的个数
$0 脚本名称
$1 ..... 第几个参数