2018-7-27 笔记

2018-7-27笔记

20.1 shell脚本介绍

shell是一种脚本语言

可使用逻辑判断、循环等语法

可以自定义函数

shell是系统命令的集合

shell脚本可以实现自动化运维,能大大增加我们的运维效率

shell练习

20.2 shell 脚本结构和执行

第一行:

需要制定,需要通过的解释器(bin/bash)

执行:

需要赋予执行权限,方可执行:

# chmod a+x 01.sh

# ./01.sh

20.3 date命令用法

# date 显示系统时间

针对文件标记日期

日历

。。。。。。

20.4 shell脚本中的变量

20.5 shell脚本中的逻辑判断

示例:第一种写法

if(如果)then(然后)fi

#!/bin/bash
a=5 b=6      ---设置变量
if [ $a -gt $b ]    ---如果a大于B
then  ----然后
echo ok   ----输入ok
fi     ----结束
if [ $a -lt $b ]   --如果a小于b
then  ----然后
echo no   ----输入no

fi  

第二种写法:

if(如果)then(然后);elif(如果)else(当if条件不满足就执行else)fi

#!/bin/bash
a=8      
if [ $a -gt 50 ]
then
echo ">5"
elif [ $a -lt 5 ]      --2次判断
then
echo "<5"
else                    --当if语句不符合,则运行else
echo "no man zu"

fi

3种写法:

if......;then.......;fi

if.....;then......else....fi

if.....then.....elif.....else..fi

逻辑判断表达式

-ne —比较两个参数是否不相等
-lt —小于
-le —小于等于
-gt —大于

-ge —大于等于

-eq  等于

&&并且      ||或者    ---- if 【 】 &&【】;then   结合判断

20.6 文件目录属性判断

举个例子:

#!/bin/bash
f=/tmp/123.txt    --设置变量
if [ -f $f ]         ---判断f变量是否是普通文件,且存在
then
echo $f cunzai            --存在则显示cunzai
else
touch $f                      ---没有则touch一个

fi

按照上面的,我们只需要修改变量即可

其他写法:

#!/bin/bash
f=/tmp/123.txt    --设置变量
if [ !-f $f ]   ----如果这个文件不存在  !取反
then
touch   $f

fi

 20.7 if特殊用法

-z示例:如果z的值为空,则报错not found (前面加个!是取反)

grep结合if示例

-q 过滤root以外的   -w精准匹配  

如果root存在就输入存在

20.8 20.9 case判断 (上)(下)

格式:在case程序中,可以再条件中使用  | ,表示或的意思

case 变量名  in

                value1)                        ---第一个判断

                        command

                            ;;

                value2)                        ---第二个判断

                          command

                            ;;

                *)                                 --除此之外

                          command

                            ;;

                           esac

 

示例:

#!/bin/bash
read -p "Please input a number: " n        ---让用户输入数字,返回值为n
if [ -z "$n" ]                                                --返回的n值进行判断
then                                                            
    echo "Please input a number."                --提示请输入值
    exit 1                                                        --当用户运行完脚本运行echo$? 的时候会返回1
f
n1=`echo $n|sed 's/[0-9]//g'`                        --输出是否为纯数字,如果是数字,则清空,赋值给$n1,

if [ -n "$n1" ]                                                    --判断$n1是否为空(即$n1不是纯数字),

then
 echo "Please input a number."                    --为空再次提示输入数字
 exit 1                                                              --退出
fi

if [ $n -lt 60 ]&& [ $n -ge 0 ]                             ---当数值小于60 且大于等于0  提示tag1
then
    tag=1
elif [ $n -ge 60 ] && [ $n -lt 80 ]   ---当数值大于等于60并且小于80    提示tag2
then
    tag=2
elif [ $n -ge 80 ]  && [ $n -lt 90 ]        ---当数值大于等于80且小于90   提示tag3
then
    tag=3
elif [ $n -ge 90 ] && [ $n -le 100 ]        ---当数值大于等于90且小于100 提示tag4
then
    tag=4
else                                                       ---如果不符合上述条件则tag=0
    tag=0
fi
case $tag in                                    --当你的tag值为1/2/3/4、的时候执行如下
    1)
echo "not ok"                    ---tag1提示not ok 
        ;;
    2)
        echo "ok"                            --tag2提示 ok
        ;;
    3)
        echo "ook"                             -tag3提示 ook
        ;;
    4)
        echo "oook"                            ---tag4提示 oook
        ;;
    *)                                                --除此之外的执行tag=0
        echo "The number range is 0-100."                --提示重新输入数值范围为0-100
        ;; 

esac

执行结果10

执行结果101:提示不在此范围

执行过程

20.10 for循环

格式:

for  变量名  in 条件

do

command

done

示例:把1-5的数字相加

#!/bin/bash
number=0                ---
设置number变量=0
for i in `seq 1 5`            ---设置i变量序列为1-5
do    
          number=$[$number+$i]        --再次让number赋值等于  number+i的值
done
echo $number                    显示总数

 

下图是执行过程

示例:用在查找目录

#!/bin/bash
cd /etc/                --
进入到目录

for a in `ls /etc/`            --设置变量a为 ls /etc/

do
   if [ -d $a ]            判断如果$a目录存在的话
then
   ls -d $a                ---
显示出来
   fi
 

done

20.11 20.12 while循环(上)(下)

语法格式

while  条件;

do

command

done

示例;查看系统负载

#!/bin/bash
while :
do
    load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1`        --
设置变量load
    if [ $load -gt 10 ]                            --如果负载大于0
    then
        /usr/bin/sbin/mail.py xxx@qq.com "$load" "报警“     --发送邮件给用户(这里可以自己写一个发送邮件脚本)
    fi
    sleep 30                        --30秒后再次检查

done

关于load的变量分步解释:

w --查看负载

head -1    ---显示第一

w|head -1|awk -F 'load average: ' '{print $2}'    ---load作分割 打印第二行         (即load为第一行)

w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1   --以.(点)作分割,分割第一段

20.13 break跳出循环

#!/bin/bash
for i in `seq 1 4`            --
变量
do
echo $i
if [ $i -eq 3 ]                    --当i等于3
then
    break                        --跳出循环
fi
done
echo abcs        

执行过程:可以看到当i=3就跳出以下循环,直接运abc结束

20.14 continue结束本次循环

#!/bin/bash
for i in `seq 1 4`
do
echo $i
if [ $i -eq 3 ]
then
continue
fi
echo $i
done

echo abcs

执行过程:可以看到一个3,就没了。continue仅仅跳出本次循环,继续下一次循环

20.15 exit退出整个脚本

exit直接退出整个脚本

#!/bin/bash
for i in `seq 1 5`
do
    echo $i
    if [ $i == 3 ]
    then
        exit
    fi
    echo $i
done

echo aaaaaaa

执行过程:当i=3 直接退出脚本

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值