美文网首页
day28 Shell编程基础

day28 Shell编程基础

作者: 藏鋒1013 | 来源:发表于2019-04-09 23:36 被阅读0次

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

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

    2、什么是Shell?

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

     [root@oldboyedu ~]# tail -1 /etc/passw    
    oldgirl1:x:8889:8889::/home/oldgirl1:/bin/bash  #<==创建用户时,系统指定的翻译官
    

    3、Shell的分类

    1.Bourne shell

    Bourne shell又包括Bourne shell(sh)、Korn shell(ksh)、Bourne Again shell(bash)三种类型

    2.C shell

    C shell 又包括csh、tcsh两种类型。
    CentOS7支持的shell:

     [root@oldbiyedu~]# cat /etc/shells
    /bin/sh
    /bin/bash
    /usr/bin/sh
    /usr/bin/bash
    

    /bin/sh是bash的软链接。

    4、CentOS7:默认Shell

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

    5、什么是Shell脚本?

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

    6、Shell变量

    a.全部变量(环境变量)

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

    [root@oldboyedu ~]# echo $PS1
    [\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\] \w\[\e[0m\]]\$
    
    [root@oldboyedu ~]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    
    [root@oldboyedu ~]# echo $HOME
    /root
    [root@oldboyedu ~]# echo $SHELL
    /bin/bash
    [root@oldboyedu ~]# echo $UID
    0
    

    自定义环境变量:
    方法一:

    export OLDBOY="I am oldboy."
    

    方法二:

    OLDBOY="I am oldboy."
    exprot OLDBOY
    [root@oldboyedu ~]# export OLDBOY="I am oldboy."
    [root@oldboyedu ~]# echo $OLDBOY
    I am oldboy.
    

    /etc/profile==>/.bash_profile===>/.bashrc===>/etc/bashrc

    老男孩推荐以后把环境变量放入/etc/bashrc

    [root@oldboyedu ~]# tail -1 /etc/bashrc 
    export OLDBOY="I am oldboy."
    [root@oldboyedu ~]# . /etc/bashrc
    [root@oldboyedu ~]# echo $OLDBOY #<==输出一个变量内容就加$变量名
    I am oldboy.
    

    安装java服务的时候就会配置环境变量。

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

    是编写Shell脚本最常用的变量。
    变量名=值
    a=1
    变量名:数字、字母、下划线,不能是数字开头
    如:oldboy、123a、_abc
    等号(=): 赋值符,把什么东西给谁。赋值符号两边不能有空格。
    值:东西,变量内容。
    引用内容的符号:单引号(')、双引号(")、反引号(`)、不加引号
    举例:

    [root@oldboyedu ~]# a=1
    [root@oldboyedu ~]# echo $a
    1
    
    [root@oldboyedu ~]# y=$x+1
    [root@oldboyedu ~]# echo $y
    1+1
    [root@oldboyedu ~]# y="$x+1"
    [root@oldboyedu ~]# echo $y
    1+1
    [root@oldboyedu ~]# y='$x+1'
    [root@oldboyedu ~]# echo $y
    $x+1
    [root@oldboyedu ~]# y=`$x+1`
    -bash: 1+1: command not found
    [root@oldboyedu ~]# let y="$x+1"      #<==让括号的内容进行计算。
    [root@oldboyedu ~]# echo $y
    2
    
    [root@oldboyedu ~]# a=1
    [root@oldboyedu ~]# echo ${a}b
    1b
    

    7、表达式

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

    [root@oldboyedu ~]# [ "a" = "b" ] && echo 1||echo 0
    0
    [ "a" = "b" ] && echo 1||echo 0
    如果表达式成立,打印1,否则打印0.
    
    [ "a" = "b" ] && echo 1  #跟屁虫。
    如果表达式成立,打印1
    [ "a" = "b" ] || echo 0  #杠精。
    如果表达式成立是假的,打印0
    
    取反:
    [ ! "a" = "b" ] && echo 1
    

    整数表达式:

    大于(>) -gt
    大于等于(>=) -ge
    小于(<) -lt
    小于等于(<=) -le
    等于(=) -eq
    不等于(≠) -ne

    举例:

    [root@oldboyedu ~]# a=1
    [root@oldboyedu ~]# [ $a -eq 2 ] && echo 1||echo 0
    0
    [root@oldboyedu ~]# [ $a -eq 1 ] && echo 1 || echo 0
    1
    

    1)整数表达式符 两端必须要由空格
    2)中括号里面两端必须有空格
    3)变量和比较的内容,不需要加引号

    字符表达式:

    -z 变量长度为0时,为真(表达是正确)。zero
    -n 变量长度不为0时,为真(表达是正确)。not zero

    a == a字符串是否相同
    

    字符串要加双引号
    举例:

    [root@oldboyedu ~]# oldboy="I am oldboy"
    [root@oldboyedu ~]# [ -z "$oldboy" ] && echo 1 || echo 0
    0
    [root@oldboyedu ~]# oldboy=""
    [root@oldboyedu ~]# [ -z "$oldboy" ] && echo 1 || echo 0
    1
    [root@oldboyedu ~]# [ -n "$oldboy" ] && echo 1 || echo 0
    0
    [root@oldboyedu ~]# [ "test" == "host" ] && echo 1 || echo 0
    0
    [root@oldboyedu ~]# [ "test" == "test" ] && echo 1 || echo 0
    1
    

    8、Shell判断句

    如果……那么……否则……

    if判断句语法:

    if [ 表达式 ]
    then
         命令
    fi
    

    举例:

    [root@oldboyedu ~]# cat test.sh 
    #!/bin/bash
    boy="潜力股"
    if [ "$boy" ==  "潜力股" ]
    then
        echo "先和你谈谈朋友"
    else
    echo "白白"
    fi
    [root@oldboyedu ~]# sh test.sh
    先和你谈谈朋友
    
    [root@oldboyedu ~]# cat judge_date.sh
    if [ $(date +%w) -eq 6 ]
    then 
        echo "一起去旅游吧"
    else
        echo "还是好好上课吧"
    fi
    [root@oldboyedu ~]# sh judge_date.sh
    还是好好上课吧
    [root@oldboyedu ~]# date
    Tue Apr  9 11:33:13 CST 2019
    [root@oldboyedu ~]# date -s '2019/4/13'
    Sat Apr 13 00:00:00 CST 2019
    [root@oldboyedu ~]# sh judge_date.sh
    一起去旅游吧
    
    实现多条件
    [root@oldboyedu ~]# cat judge_date.sh 
    if [ $(date +%w) -eq 6 ] || [ $(date +%w) -eq 0 ]
    then 
        echo "一起去旅游吧"
    else
        echo "还是好好上课吧"
    fi
    

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

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

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

    练习题:Shell编程实现 两个整数比较大小

    解答:

    [root@oldboyedu ~]# cat com_num.sh
    #!/bin/sh
    read -p "请输入两个整数:" a b
    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
    请输入两个整数:3 3
    3=3
    [root@oldboyedu ~]# sh com_num.sh
    请输入两个整数:3 4
    3<4
    [root@oldboyedu ~]# sh com_num.sh
    请输入两个整数:3 2
    3>2
    

    9、for 循环

    for语法:

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

    举例:

    [root@oldboyedu ~]# cat for1.sh 
    for n in 1 2 3 4 5
    do
        echo $n
    done
    [root@oldboyedu ~]# sh for1.sh
    1
    2
    3
    4
    5
    

    练习题:打印254个ip

    解答:

    [root@oldboyedu ~]# cat for.sh
    for n in {1..254}
    do
        echo "10.0.0.$n"
    done
    

    相关文章

      网友评论

          本文标题:day28 Shell编程基础

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