美文网首页我也码Linux自己的世界自己码
day28-Shell编程3小时光速入门

day28-Shell编程3小时光速入门

作者: 慕男 | 来源:发表于2019-04-09 13:32 被阅读53次

    Shell编程3小时光速入门

    1、为什么要学习shell编程?

    Linux系统中会大量的使用Shell,工作中我们也需要自动化实现业务,例如:自动备份、监控、自动安装服务
    Shell编程是Linux运维人员必须要会编程语言。最简单的编程语言。
    编程也是运维人员必须具备的本领:
    Shell、python是运维人员必须具备的本领

    2、什么是Shell?

    shell就是一个解释器(翻译官),命令行的命令以及脚本都会通过shell解释,传给操作系统,处理后在输出给用户。

    3、Shell的分类

    /bin/sh、/bin/bash、/usr/bin/sh、/usr/bin/bash

    4、CentOS7默认Shell

    [root@zhang ~]# echo $SHELL
    /bin/bash
    

    5、什么是Shell脚本?

    程序、命令放入文件里执行,这个文件称之为Shell脚本文件。
    工作中最多的编程写脚本,存放在文件里。

    6、Shell的变量:

    A.全局变量(环境变量)

    在整个系统中生效、一般是大写、系统中会默认存在这样的变量,满足系统和程序运行的需求。
    系统自带的环境变量;

    [root@zhang ~]# echo $PS1
    [\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e[0m\]]\$
    

    自定义环境变量:
    方案一:
    方案二:

    B.局部变量(普通变量)

    是编写Shell脚本最常用的变量
    用法:变量名=值(a=1)

    要求

    变量名:数字、字母、下划线、不能是数字开头。
    =等号:赋值符(把XXX给谁)。
    值:东西,变量内容
    引用内容的符号:单引号、双引号、反引号、不加引号
    举例:

    [root@zhang ~]# a=1
    [root@zhang ~]# echo $a
    1
    
    [root@zhang ~]# a=1
    [root@zhang ~]# echo ${a}b
    1b
    

    7、表达式

    [ 表达式 ]中括号表达式,中括号里面两端必须要有空格。
    字符串要加双引号

    [root@zhang ~]# [ "a" = "b" ] &&echo 1|echo 0   #<==如果表达式成立,打印1,否者打印0.
    0
    
    [root@zhang ~]# [ "a" = "b" ] || echo 0  #<==如果表达式成立是假的,打印0
    0
    

    取反:

    [root@zhang ~]# [ ! "a" = "b" ] &&echo 1
    1
    

    整数表达式:
    .> -gt
    .>= -ge
    < -lt
    <= -le
    = -eq
    不等于 -ne
    举例:

    [root@zhang ~]# a=1
    [root@zhang ~]# echo $a
    1
    [root@zhang ~]# [ $a -gt 2 ] &&echo 1||echo 0
    0
    [root@zhang ~]# [ $a -ge 2 ] &&echo 1||echo 0
    0
    [root@zhang ~]# [ $a -lt 2 ] &&echo 1||echo 0
    1
    [root@zhang ~]# [ $a -le 2 ] &&echo 1||echo 0
    1
    [root@zhang ~]# [ $a -eq 2 ] &&echo 1||echo 0
    0
    [root@zhang ~]# [ $a -ne 2 ] &&echo 1||echo 0
    1
    

    (1)整数表达式符 两端必须要有空格。
    (2)中括号里面两端必须要有空格。
    (3)变量和比较的内容,不需要加引号。
    字符表达式:
    -z 变量内容长度为0,为真。zero
    -n 变量内容长度为【不】为0时,为真。not zero
    a==a字符串时=是否相同 条件:
    ①字符串要加双引号

    [root@zhang ~]# a="I am munan"
    [root@zhang ~]# [ -n "$a" ] &&echo 1||echo 0
    1
    [root@zhang ~]# [ -z "$a" ] &&echo 1||echo 0
    0
    

    Shell判断句:
    如果。。。那么
    如果[ 我是DJ ] 那么你会爱我吗
    if判断句语法:
    if [ 表达式 ]
    then命令
    fi
    举例:

    [root@zhang ~]# vim munan.sh 
    #!/bin/bash
    a=1
    if  [ $a -eq 1 ]
    then
        echo 1
    fi
    
    [root@zhang ~]# vim munan.sh 
    #!/bin/bash
    munan="DJ"
    if  [ "$munan" == "DJ" ]
    then
         echo "和你谈谈理想"
    else
         echo "拜拜 "
    fi
    [root@zhang ~]# sh munan.sh 
    和你谈谈理想
    
    [root@zhang ~]# vim date.sh
    if [ $(date +%w) -eq 6 ]
    then
        echo "休息"
    else
        echo "上课"
    fi
    

    7、read命令 交互式读取用户输入

    -p "提醒:"
    -t "多长时间内等待输入"

    [root@zhang ~]# read  -p "请输入一句话:" boy
    请输入一句话:潜力股
    [root@oldboyedu ~]# echo $boy
    潜力股
    相当于boy="潜力股"
    [root@oldboyedu ~]# cat test.sh 
    .#!/bin/bash
    read -p "请输入你喜欢的男孩的一句话:" boy
    if [ "$boy" ==  "潜力股" ]
    then
        echo "先和你谈谈朋友"
    else
        echo "白白"
    fi
    [root@zhang  ~]# sh test.sh
    请输入你喜欢的男孩的一句话:我没钱
    白白
    [root@zhang  ~]# sh test.sh
    请输入你喜欢的男孩的一句话:潜力股
    先和你谈谈朋友
    root@zhang ~]# cat test.sh 
    .#!/bin/bash
    read -p "请输入你喜欢的男孩的一句话:" boy
    if [ "$boy" ==  "潜力股" ]
    then
        echo "先和你谈谈朋友"
    elif [ "$boy" ==  "老爸是李刚" ]
    then
       echo "直接嫁给你"
    elif [ "$boy" ==  "二环内有套房" ]
    then
       echo "立马领证"
    
    else
        echo "白白"
    fi
    

    练习题:Shell编程实现 两个整数比较大小
    特殊位置变量:
    1 脚本文件的第一个参数赋值给1
    2 脚本文件的第二个参数赋值给2

    [root@zhang ~]# cat t.sh
    echo $1 $2
    [root@zhang ~]# sh t.sh ZZZ XXX
    ZZZ XXX  #<==ZZZ就是$1输出的结果,XXX就是$2输出的结果。
    [root@zhang ~]# cat com_num.sh 
    #!/bin/sh
    #read -p "请输入两个整数:" a b
    a=$1
    b=$2
    if [ $a -gt $b ]
    then
        echo "$a>$b"
    elif [ $a -eq $b ]
    then
        echo "$a=$b"
    else
        echo "$a<$b"
    fi
    [root@oldboyedu ~]# sh com_num.sh 2 3
    2<3
    [root@oldboyedu ~]# sh com_num.sh 2 2
    2=2
    [root@oldboyedu ~]# sh com_num.sh 3 2
    3>2
    

    9、for循环

    for n in 取值列表
    do
    执行命令
    done

    [root@zhang~]# cat for1.sh 
    for n in 1 2 3 4 5
    do
        echo $n
    done
    [root@zhang~]# sh for1.sh
    1
    2
    3
    4
    5
    [root@zhang~]# sh -x for1.sh
    + for n in 1 2 3 4 5
    + echo 1
    1
    + for n in 1 2 3 4 5
    + echo 2
    2
    + for n in 1 2 3 4 5
    + echo 3
    3
    + for n in 1 2 3 4 5
    + echo 4
    4
    + for n in 1 2 3 4 5
    + echo 5
    5
    
    [root@zhang~]# cat for1.sh
    for n in {1..5}
    do
        echo $n
    done
    [root@zhang~]# sh for1.sh
    1
    2
    3
    4
    5
    

    练习题:打印254个IP
    书写脚本习惯:
    1)以.sh结尾
    2)脚本开头第一行#!/bin/bash 脚本内容由谁解释。
    由于Linux下默认时bash,所以也可以忽略这一行

    相关文章

      网友评论

        本文标题:day28-Shell编程3小时光速入门

        本文链接:https://www.haomeiwen.com/subject/nfpviqtx.html