一、for循环
1.1循环的格式
for 变量 in 列表
do
代码
代码
...
done
循环的逻辑:
将列表的每一元素逐一赋值给变量,每复制一次,do和done之间的代码就会执行一次
1.2 列表的生成方式
方法1:直接给出列表元素
方法2:用通配符来生成元素
方法3:用命令来生成元素
方法4:用{ }展开的形式生成元素
1.3 案例
生成数字列表
案例1:输出1-100之间的数字
#!/bin/bash
clear
echo ""
echo --------------程序开始执行---------------
for num in {1..100}
do
echo $num
sleep 0.5
done
echo --------------程序执行结束----------------
案例2:输出ip地址,范围是192.168.1-10
#!/bin/bash
for num in {1..10}
do
ip="192.168.1.$num"
done
案例3:检查192.168.1.-10中的在线主机
#!/bin/bash
for num in {1..10}
do
ip="192.168.1.$num"
if ping -c1 -W1 $ip &> /dev/null;then
echo "$ip is online"
else
echo "ip is offline"
fi
sleep 0.5
done
生成字符串列表
案例:
#!/bin/bash
for name in {a..f}
do
touch /tmp/$name.txt
done
生成文件名列表
案例1:输出etc下的每个文件名
#!/bin/bash
for fileName in `ls /etc/`
do
echo "$fileName"
sleep 0.5
done
案例2:判断etc下的每一个文件的文件类型
方法1:
#!/bin/bash
for fileName in `ls /etc/`
do
if [ -f /etc/$fileName ];then
echo "$fileName 是一般文件"
elif [ -d /etc/$fileName ];then
echo "$fileName 是目录文件"
else
echo "$flieName 是其他文件"
fi
sleep 0.5
done
方法2:
#!/bin/bash
for fileName in /etc/*
do
if [ -f $fileName ];then
echo "$fileName 是一般文件"
elif [ -d $fileName ];then
echo "$fileName 是目录文件"
else
echo "$flieName 是其他类型文件"
fi
sleep 0.5
done
二、while 循环
2.1 while循环的格式
格式1:正常循环的格式
while 条件
do
代码
代码
done
格式2:读取文件格式
while read line
do
代码
代码
done<<文件名
案例1:输出/etc/passwd中的每一行有多少个字符,要求显示第几行有多少个字符
#!/bin/bash
m=1
while read line
do
nums=`echo $line | wc -c
echo "第$m行有$nums个字符"
m=$[$m+1]
done</etc/passwd
案例2:输出每个用户的的用户名和shell类型
#!/bin/bash
while read line
do
name=`echo $line | awk -F ":" '{print $1}'`
stype=`echo $line | awk -F ":" '{print $NF}'
echo "用户$name 的shell类型是 $stype"
done</etc/passwd
案例3:输出1-100之间的数字
#!/bin/nash
num=1
while [ $num -le 100 ]
do
echo $num
num=$[$num+1]
done
案例4:每隔5s检查一次bom是否登录系统
#!/bin/bash
while ture
do
sleep 5
if who | grep "^bom\>" &> /dev/null;then
echo "bom is online"
exit 5
else
echo "bom is offline"
fi
done
三、循环控制
break : 终止循环-直接跳出循环
continue : 立刻终止这次循环,直接进行下一次循环
案例 1:
while true
do
slepp 5
if who | grep "^bom\>" &> /dev/null;then
break
else
echo "bom is offline"
continue
fi
done
echo "bom is online"
案例2:九九乘法表
#!/bin/bash
for second in {1..9}
do
for first in {1..9}
do
sum=$[$first*$second]
echo -n "$first*$second=$num" #输出换行
if [ $first -eq $second ];then
break
fi
done
echo
done
四、函数
函数就是一段代码 ,通过使用函数可以实现代码的复用,降低代码的冗余度,提高开发效率
定义函数的格式
函数名 (){代码代码}
注意:函数无法直接直接运行,必须在调用的时候,才能运行
调用的函数的格式:函数名
案例:
#!/bin/bash
fun1()
{
echo "函数开始了"
echo "今天星期四"
echo "函数结束了"
}
echo "start"
fun1
echo "stop"
五、变量
5.1 类型
环境变量:linux内置的变量自定义变量:用户自己定义的的变量位置变量:用于向脚本/函数传递参数
5.2 环境变量
一般环境变量都是大写的
PATH :定义搜索命令的路径
USER:当前用户的用户名
HOME: 当前用户的家目录
PS1: 当前用户的提示符
PS2:当前用户的续行符
SHELL :当前用户的shell类型
UID:当前用户的uid
环境变量配置文件
用户环境变量配置环境:在家目录下, .bashrc .bash_profile
系统用户变量配置文件:/etc 下 , bashrc 和 profile
六、位置变量
位置变量,也称之为位置参数 ,作用是用于向函数或者向脚本传递参数的
接收数据的位置变量是 :$0 $1 $2 $3 $$ $#
$# 参数的个数$0 脚本名称$1..... 第几个参数
案例1:
#!/bin/bash
if [ $# -ne 3 ];then
echo "error" 参数错误
echo "Usage $0 姓名 年龄 性别"
exit 4
fi
echo "-------------程序开始执行------------------"
echo "姓名:$1"
echo "年龄:$2"
echo "性别:$3"
echo "脚本名称:$0"
echo "脚本参数个数:$#"
案例2:通过函数,判断两个数字的大小,输出较大的位数字
#!/bin/bash
read -p "请输入数值1:" num1
read -p "请输入数值2:" num2
fun1()
{
m=$1
n=$2
if [ $m -gt $n ];then
echo "$m"
else
echo "$n"
fi
}
fun1 $num1 $num2