shell脚本之for循环、while循环

一、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  .....  第几个参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值