美文网首页
shell脚本

shell脚本

作者: 天生顽皮 | 来源:发表于2021-06-26 18:51 被阅读0次

    1.执行脚本的方式

    1.bash  sh  执行  调用子shell
    2.source  .  执行  父shell运行
    3.全路径   执行  执行权限  /etc/rc.local +x
    

    2.环境变量

    两类:
    环境变量(全局变量)针对所有的shell生效
    普通变量(局部变量)针对当前shell生效
    unset   取消环境变量(当前)
    1.环境变量  普通变量  全局局部  永久   临时
    永久  /etc/profile
    系统全局变量
    shell中自定永久的局部变量
    临时export定义    测试使用
    
    名称定义
    值的定义
    命令定义
    time=`date+%F`
    time=$(date+%F)
    
    2.1环境变量的定义
    查看系统变量
    env   set
    1.按照执行顺序
    2.按照生效顺序
    (1)/etc/profile  第一个执行  优先生效
    (2).bash_profile 第二个执行 家目录相关的变量文件
    (3).bashrc  第三个执行
    (4)/etc/bashrc  第四个执行文件
    
    image.png

    3.特殊变量

    image.png

    4.变量引用

    image.png
    1.5.1 自定义变量与引用
    # VAR=123
    # echo $VAR
    123
    # VAR+=456
    # echo $VAR
    123456
    

    5.脚本的传参

    1.直接传参
    [root@m01-shell ~]# cat test.sh
    #!/bin/sh
    pwd
    echo $1 $2 $3
    [root@m01-shell ~]# sh test.sh
    /root
    
    [root@m01-shell ~]# sh test.sh 10
    /root
    10
    [root@m01-shell ~]# sh test.sh 10 20 30
    /root
    10 20 30
    
    2.赋值传参
    [root@m01-shell ~]# cat test.sh
    #!/bin/sh
    pwd
    name=$1
    age=$2
    echo $name $age
    [root@m01-shell ~]# sh test.sh oldboy 18
    /root
    oldboy 18
    
    3.read读入
    [root@m01-shell ~]# cat test.sh 
    #!/bin/sh
    read -p "请输入你的姓名:" name         # -p 提示符 双引号里面内容自定义 name 变量的名称 不要加双引号
    echo $name
    
    [root@m01-shell ~]# cat test.sh 
    #!/bin/sh
    read -p "请输入你的姓名: " name            # 在双引号加空格
    echo $name
    
    
    [root@m01-shell ~]# cat test.sh
    #!/bin/sh
    read -p "请输入你的姓名和年龄: " name age
    echo $name
    echo $age
    [root@m01-shell ~]# sh test.sh
    请输入你的姓名和年龄: oldboy 18
    oldboy
    18
    
    
    [root@m01-shell ~]# cat test.sh
    #!/bin/sh
    read -p "请输入你的姓名: " name 
    read -p "请输入你的年龄: " age
    echo $name
    echo $age
    [root@m01-shell ~]# sh test.sh
    请输入你的姓名: oldboy
    请输入你的年龄: 18
    oldboy
    18
    
    
    [root@m01-shell ~]# cat test.sh
    #!/bin/sh
    read -p "请输入你的姓名: " name 
    read -p "请输入你的年龄: " age
    echo name=$name
    echo age=$age
    [root@m01-shell ~]# sh test.sh
    请输入你的姓名: oldboy
    请输入你的年龄: 20
    name=oldboy
    age=20
    

    5.变量子串

    切割 ::
    删除   # 从前往后  bb    ##贪婪
             % 从后往前删      %%贪婪
              //   替换                ///  贪婪
    统计字符串长度
         ${#name}
    其他统计方式
    expr  wc  -L   awk
    
    变量子串的删除和替换
    [root@m01-shell ~]# url=www.oldboyedu.com
    [root@m01-shell ~]# echo $url
    www.oldboyedu.com
    [root@m01-shell ~]# 
    [root@m01-shell ~]# echo $url|sed 's#www.##g'
    oldboyedu.com
    # 从前面往后删除 可以使用通配符匹配字符串
    [root@m01-shell ~]# echo ${url#.}
    www.oldboyedu.com
    [root@m01-shell ~]# 
    [root@m01-shell ~]# echo ${url#*.}
    oldboyedu.com
    [root@m01-shell ~]# echo ${url#www.}
    oldboyedu.com
    
    ## 贪婪匹配 删除到最后一个.
    [root@m01-shell ~]# echo ${url#www.oldboyedu.}
    com
    [root@m01-shell ~]# echo ${url#*.*.}
    com
    [root@m01-shell ~]# echo ${url##*.}
    com
    
    
    从后往前删除
    [root@m01-shell ~]# echo ${url}
    www.oldboyedu.com
    [root@m01-shell ~]# 
    [root@m01-shell ~]# echo ${url%*.}
    www.oldboyedu.com
    [root@m01-shell ~]# echo ${url%.*}
    www.oldboyedu
    [root@m01-shell ~]# 
    [root@m01-shell ~]# echo ${url%.*.*}
    www
    
    %% 贪婪匹配 
    [root@m01-shell ~]# echo ${url%%.*}
    www
    
    [root@m01-shell ~]# num=100%
    [root@m01-shell ~]# echo $num
    100%
    [root@m01-shell ~]# 
    [root@m01-shell ~]# echo ${num%%}
    100%
    [root@m01-shell ~]# echo ${num%\%}
    100
    
    
    变量的替换
    [root@m01-shell ~]# echo $url
    www.oldboyedu.com
    [root@m01-shell ~]# echo ${url/www/test}
    test.oldboyedu.com
    
    [root@m01-shell ~]# echo ${url/w/W}
    Www.oldboyedu.com
    [root@m01-shell ~]# 
    [root@m01-shell ~]# echo ${url//w/W}
    WWW.oldboyedu.com
    [root@m01-shell ~]# echo ${url/m/W}
    www.oldboyedu.coW
    
    
    贪婪替换//
    [root@m01-shell ~]# echo ${url//w/W}
    WWW.oldboyedu.com
    
    
    5.1统计字符串长度小于3的
    root@m01-shell ~]# echo $name
    I am lizhenya teacher I am 18
    
    第一种方式: 使用for循环方式输出
    for i in I am lizhenya teacher I am 18
    do
        [ ${#i} -lt 3 ]
          i=I
          1   -lt 3   && echo $i
          i=am
          2   -lt 3  && echo $i
          i=lizhenya
          8   -lt 3  &&
          i=techaer
    done
    
    第二种方式使用awk
    [root@m01-shell ~]# echo $name|xargs -n1|awk '{if(length<3)print}'
    I
    am
    I
    am
    18
    
    第三种方式使用awk
    [root@m01-shell ~]# echo $name|awk '{for(i=1;i<=NF;i++)if(length($i)<3)print $i}'
    I
    am
    I
    am
    18
    
    
    5.2统计变量子串的长度
    第一种方法: wc -L
    [root@m01-shell ~]# echo $name
    I am oldboy
    [root@m01-shell ~]# echo $name|wc -l            # 获取文件中总共的行数
    1       
    [root@m01-shell ~]# echo $name|wc -L            # 获取文件中最长一行的长度
    11
    
    第二种方法: 使用子串的# 
    [root@m01-shell ~]# echo ${#name}
    11
    
    第三种方法: 使用expr
    [root@m01-shell ~]# expr length "$name"
    11
    
    第四种方法: 使用awk
    [root@m01-shell ~]# echo $name|awk '{print length}'
    11
    

    6.数值运算

    6.1expr 只支持整数运算
    [root@m01-shell ~]# expr 1 + 1
    2
    [root@m01-shell ~]# 
    [root@m01-shell ~]# expr 10 + 1
    11
    [root@m01-shell ~]# expr 10 - 1
    9
    [root@m01-shell ~]# expr 10 * 1
    expr: syntax error
    [root@m01-shell ~]# expr 10 \* 1
    10
    [root@m01-shell ~]# expr 10 - 1.5
    
        案例: 判断我们输入的数字是否为整数
        [root@m01-shell ~]# cat count.sh
        #!/bin/sh
        read -p "请输入一个整数: " num
        expr 1 + $num &>/dev/null
        [ $? -ne 0 ] && echo "你输入的不是整数" && exit 
    
        echo $num
        [root@m01-shell ~]# sh count.sh 
        请输入一个整数: 1.5
        你输入的不是整数
        [root@m01-shell ~]# sh count.sh 
        请输入一个整数: 1q
        你输入的不是整数
        [root@m01-shell ~]# sh count.sh 
        请输入一个整数: 20
        20
    案例
    3.1 输入两个整数计算这两个整数的相加,相减,相乘,相除,求余的结果
    #!/bin/sh
    while  true
    do
    read  -p  "请输入2个整数: " num num1
    expr  $num + $num1
     [ $? -ne 0  ] &&   echo  "不是整数" && exit
    expr  $num - $num1
    expr  $num \* $num1
    expr  $num / $num1
    done
    
    6.2注意
    $(()) PS: 注意两个小括号是做运算 一个小括号是执行命令 $()  运算效率最高
    [root@m01-shell ~]# echo $((10+2-5))
    7
    [root@m01-shell ~]# echo $((10+2*5))
    20
    [root@m01-shell ~]# echo $(((10+2)*5))
    60
    
    [root@name ~]# nun=$(ls)
    [root@name ~]# echo   $nun
    1.sh 2.sh 3.sh anaconda-ks.cfg diff.sh honglangman.sh jisuan.sh jiyuan.sh js.sh ss.sh test.sh
    
    6.3let运算 需要使用变量 只支持整数运算
    [root@name ~]# let sum=1+1
    [root@name ~]# echo  $sum
    2
    
    [root@name ~]# let  i=$sum+1
    [root@name ~]# echo   $i
    3
     
    [root@m01-shell ~]# num=10
    [root@m01-shell ~]# num1=20
    [root@m01-shell ~]# let count=$num1+$num
    [root@m01-shell ~]# echo $count
    30
    
    案例: 脚本中经常用到
    for i in I am lizhenya
    do
         let a++
    done
    echo $a
    
    [root@m01-shell /server/scripts/day2]# sh -x for.sh 
    + for i in I am lizhenya
    + let a++
    + for i in I am lizhenya
    + let a++
    + for i in I am lizhenya
    + let a++
    + echo 3
    3
    
    6.4bc 支持小数和整数运算
    [root@m01-shell ~]# echo 10+10|bc
    20
    [root@m01-shell ~]# echo 10*10|bc
    100
    [root@m01-shell ~]# echo 10-10|bc
    0
    [root@m01-shell ~]# echo 10-10.5|bc
    -.5
    
    6.5awk运算
    [root@m01-shell ~]# awk 'BEGIN{print 10+10}'
    20
    [root@m01-shell ~]# 
    [root@m01-shell ~]# awk 'BEGIN{print 10-10}'
    0
    [root@m01-shell ~]# awk 'BEGIN{print 10+100}'
    110
    [root@m01-shell ~]# awk 'BEGIN{print 10+100/2}'
    60
    [root@m01-shell ~]# awk 'BEGIN{print 10+100/2*4}'
    210
    [root@m01-shell ~]# echo 10 20
    10 20
    [root@m01-shell ~]# echo 10 20|awk '{print $1+$2}'
    30
    
    6.6python 直接运算
    expr $(()) $[] let bc awk python 
    expr 整数判断
    $(()) $[] 在脚本中运算
    let  在脚本中经常出现
    bc  用的较少 测试使用 
    awk 在脚本中会出现
    
    
    案例: 做一个计算器脚本 执行脚本输出结果
    sh count.sh
    输入第一个整数: num1
    输入第二个整数: num2
    要求1
    输出到屏幕
    10+10=20
    10-10=0
    要求2 判断传入的参数必须为整数 否则退出脚本
    [root@m01-shell /server/scripts/day2]# cat count.sh 
    #!/bin/bash
    echo $1+$2=$[$1+$2]
    echo $1-$2=$[$1-$2]
    echo $1/$2=$[$1/$2]
    echo $1*$2=$[$1*$2]
    echo "-------------------------------"
    num1=$1
    num2=$2
    echo $num1+$num2=$[$num1+$num2]
    echo $num1-$num2=$[$num1-$num2]
    echo $num1*$num2=$[$num1*$num2]
    echo $num1/$num2=$[$num1/$num2]
    read -p "请输入两个整数: " num1 num2
    expr $num1 + $num2 &>/dev/null
    [ $? -ne 0 ] && echo "你输入的不是整数" && exit
    echo $num1+$num2=$[$num1+$num2]
    echo $num1-$num2=$[$num1-$num2]
    echo $num1*$num2=$[$num1*$num2]
    echo $num1/$num2=$[$num1/$num2]
    
    
    
    死循环
    while true
    do
    read -p "请输入两个整数: " num1 num2
    expr $num1 + $num2 &>/dev/null
    [ $? -ne 0 ] && echo "你输入的不是整数" && continue
    echo $num1+$num2=$[$num1+$num2]
    echo $num1-$num2=$[$num1-$num2]
    echo $num1*$num2=$[$num1*$num2]
    echo $num1/$num2=$[$num1/$num2]
    
    done
    

    7.数值比较

    常用的比较整数的方式
    [ 整数1 表示符 整数2 ]
    表示符
    -gt   大于
    -ge   大于等于
    -lt   小于
    -le   小于等于
    -eq   等于
    -ne   不等于
    
    7.1
    [root@m01-shell ~]# [ 10 -gt 5 ] && echo 成立 || echo 不成立
    成立
    [root@m01-shell ~]# [ 10 -ne 5 ] && echo 成立 || echo 不成立
    成立
    [root@m01-shell ~]# [ 10 -lt 5 ] && echo 成立 || echo 不成立
    不成立
    [root@m01-shell ~]# [ 10 -gt 10 ] && echo 成立 || echo 不成立
    不成立
    [root@m01-shell ~]# [ 10 -ge 10 ] && echo 成立 || echo 不成立
    成立
    
    案例1: 
    使用传参的方式判断两个数值的大小
    [root@m01-shell ~]# cat diff.sh 
    #!/bin/sh
    read -p "请输入两个整数: " num1 num2
    [ $num1 -gt $num2 ] && echo "num1>num2"
    [ $num1 -lt $num2 ] && echo "num1<num2"
    [ $num1 -eq $num2 ] && echo "num1=num2"
    
    案例2: 统计磁盘的使用率 如果磁盘使用率大于百分之2 则发送邮件到邮箱 (echo send mail......)
           如果磁盘使用率小于百分之2 则提示 磁盘使用正常 输出当前的使用率
     在命令行测试后写入脚本
     1)取值 
         [root@m01-shell ~]# df -h|grep /$
        /dev/mapper/centos_oldboy--muban-root   50G  2.0G   49G   4% /
    
         [root@m01-shell ~]# df -h|sed -n '/\/$/p'
        /dev/mapper/centos_oldboy--muban-root   50G  2.0G   49G   4% /
    
        [root@m01-shell ~]# df -h|awk '/\/$/'
        /dev/mapper/centos_oldboy--muban-root   50G  2.0G   49G   4% /
        [root@m01-shell ~]# df -h|awk '/\/$/{print $(NF-1)}'
        4%
    
     2)做比较
       use_disk=`df -h|awk '/\/$/{print $(NF-1)}'`
       [ ${use_disk%\%} -gt 2 ] && echo sendmail......  || echo 磁盘使用正常 当前的使用率为 $use_disk
       
     3)输出结果
     4)执行 排错 
        [root@m01-shell /server/scripts/day2]# cat disk.sh 
        #!/bin/sh
        use_disk=`df -h|awk '/\/$/{print $(NF-1)}'`
        [ ${use_disk%\%} -gt 2 ] && echo sendmail......  || echo 磁盘使用正常 当前的使用率为 $use_disk
    
        [root@m01-shell /server/scripts/day2]# sh -x disk.sh 
        ++ df -h
        ++ awk '/\/$/{print $(NF-1)}'
        + use_disk=4%
        + '[' 4 -gt 2 ']'
        + echo sendmail......
        sendmail......
    
    判断里面支持命令
    下面的案例 只要我们的命令执行后是整数 就可以正常运行
    [root@m01-shell ~]# [ `df -h|awk '/\/$/{print $(NF-1)}'|awk -F% '{print $1}'` -gt 2 ]
    [root@m01-shell ~]# echo $?
    0
    
    
    
    案例3: 统计内存使用率 使用率超过百分之二 则发送邮箱报警 否则输出提示使用正常 输出当前内存使用率
           内存百分比计算方式: 已使用的除总的乘100
    [root@m01-shell ~]# free|awk 'NR==2{print $3/$2*100}'
    3.71132
    [root@m01-shell /server/scripts/day2]# cat free.sh 
    #!/bin/sh
    Mem_use=`free|awk 'NR==2{print $3/$2*100}'`
    [ ${Mem_use%.*} -gt 20 ] && echo sendmail............ || echo ${Mem_use}%
    
    案例4: 统计1分钟内系统的平均负载 超过1则发送邮件 否则提示正常
    1.取值 
    [root@m01-shell /server/scripts/day2]# cat upload.sh 
    #!/bin/bash
    use_load=`uptime|awk '{print $(NF-2)}'`
    [ ${use_load%.*} -gt 1 ] && echo "sendmail......." || echo "${use_load%,}%"
    ab -n200000 -c20000 http://127.0.0.1/index.html
    
    多整数比较 偶尔会用
    or  或者  -o 
    and 并且  -a
    
    7.2
    在正则中整数比较使用以下符号
    [[  ]]
    ==
    !=
    >
    <
    >=
    <=
    
    在正则中多整数比较使用 
    || 或者  
    && 并且
    [root@m01-shell ~]# [[ 10 == 10  ]]
    [root@m01-shell ~]# echo $?
    0
    [root@m01-shell ~]# [[ 10 == 10  -o 50 > 10 ]]
    -bash: syntax error in conditional expression
    -bash: syntax error near `-o'
    [root@m01-shell ~]# [[ 10 == 10  ||  50 > 10 ]]
    [root@m01-shell ~]# 
    [root@m01-shell ~]# echo $?
    0
    [root@m01-shell ~]# [[ 10 == 10  &&  50 > 10 ]]
    [root@m01-shell ~]# echo $?
    0
    

    8.文件判断

    [ -e  file ]  表示文件存在则为真
    [ -f  file ]  表示普通文件存在则为真
    [ -d  file ]  表示目录文件存在则为真
    [ -r  file ]  表示文件可读则为真
    [ -w  file ]  表示文件可写真为真
    [ -x  file ]  表示文件可执行则为真
    
    [root@m01-shell ~]# [ -f /etc/ ] && echo 成立 || echo 不成立
    不成立
    [root@m01-shell ~]# [ -d /etc/ ] && echo 成立 || echo 不成立
    成立
    [root@m01-shell ~]# [ -d /etc/hehe ] && echo 成立 || echo 不成立
    不成立
    [root@m01-shell ~]# [ -e /etc/ ] && echo 成立 || echo 不成立
    成立
    [root@m01-shell ~]# [ -x /etc/rc.local ] && echo 成立 || echo 不成立
    不成立
    [root@m01-shell ~]# [ -x /etc/rc.local ] && echo 成立 || echo 不成立
    成立
    
    案例:
    
    -f  判断文件是否存在
    [root@m01-shell ~]# [ -f /etc/init.d/functions  ] && . /etc/init.d/functions
    functions 函数库 函数可以直接调用
    函数调用
    [root@m01-shell ~]# cat 2.sh
    fun(){
       echo hehe
    }
    [root@m01-shell ~]# sh 2.sh
    [root@m01-shell ~]# [ -f 2.sh ] && . 2.sh
    [root@m01-shell ~]# fun
    hehe
    
    d  判断目录是否存在
    [root@m01-shell ~]# [ -d 10.0.0.61 ] || mkdir `hostname -I|awk '{print $1}' `
    [root@m01-shell ~]# ll
    drwxr-xr-x 2 root root   6 Jun 25 17:10 10.0.0.61
    
    
    [root@m01-shell ~]# [ -d /etc ] && tar zcf etc.tar.gz /etc || echo 目录不存在
    tar: Removing leading `/' from member names
    [root@m01-shell ~]# ll
    -rw-r--r-- 1 root root 10446728 Jun 25 17:11 etc.tar.gz
    [root@m01-shell ~]# [ -d /etcccc ] && tar zcf etc.tar.gz /etc || echo 目录不存在
    目录不存在
    
    8.1使用正则可以做整数的判断
    [root@shell ~]# num=10
    [root@shell ~]# [[ $num =~ ^[0-9]+$ ]] && echo "成立" || echo 不成立
    成立
    [root@shell ~]# num=10q
    [root@shell ~]# [[ $num =~ ^[0-9]+$ ]] && echo "成立" || echo 不成立
    不成立
    [root@shell ~]# num=1t0
    [root@shell ~]# [[ $num =~ ^[0-9]+$ ]] && echo "成立" || echo 不成立
    不成立
    [root@shell ~]# num=a10
    [root@shell ~]# [[ $num =~ ^[0-9]+$ ]] && echo "成立" || echo 不成立
    不成立
    [root@shell ~]# num=34252345
    [root@shell ~]# [[ $num =~ ^[0-9]+$ ]] && echo "成立" || echo 不成立
    成立
    

    9.if判断

    语法结构: 单分支   一个条件  一个结果 
    第一种写法                                   
    if [ -f /etc/profile ];then                 [  -f /etc/profile ] && echo 成立   单分支 一个条件 对应一个结果
    echo hehe  执行的命令
    fi
    第二种写法 
    if [ -f /etc/profile ]
    then 
        执行的命令
    fi
    
    [  $? -ne 0 ] && echo 请输入正确的
    
    举例: 单分支 
    if [ 你有钱 ];then 
    我就嫁给你 
    fi
    
    举例: 双分支               [ -f /etc/profile ] && echo 成立 || echo 不成立
    if [ 你有钱 ];then
    我就嫁给你 
    else
       拜拜
    fi 
    
    9.1案例:
    [root@shell /server/scripts/day3]# cat if.sh 
    #!/bin/sh
    if [ 10 -ne 10 ]
    then
        echo 成立
    else
        echo 不成立
    fi
    
    
    [root@shell /server/scripts/day3]# cat if.sh 
    #!/bin/sh
    if [ -f $1 ]
    then
        echo $1 存在
    else
        echo $1 不存在
    
    案例: 输入两个整数 使用if判断两个整数谁大谁小或等于
    sh count.sh 
    30>20
    10=10
    10<20
    
    
    
    [root@shell /server/scripts/day3]# cat count.sh 
    #!/bin/sh
    read -p "请输入两个整数: " num1 num2
    expr $num1 + $num2 &>/dev/null
    if [ $? -ne 0 ];then
        echo 请输入正确的数字
    exit
    fi
    if [ $num1 -gt $num2 ]
    then
        echo "$num1>$num2"
    elif [ $num1 -lt $num2 ]
    then
        echo "$num1<$num2"
    else
        echo "$num1=$num2"
    fi 
    
    9.2实际应用
    菜单:
    安装不同的PHP版本 PHP5.4 PHP5.5 PHP7.1
    
    第一种方式使用echo
    [root@shell /server/scripts/day3]# cat install_php.sh 
    #!/bin/sh
    echo "------------------------------PHP安装列表-----------------------------"
    echo "|             1.INSTALL PHP5.4               |"
    echo "|             2.INSTALL PHP5.5               |"
    echo "|             3.INSTALL PHP7.1               |"
    echo "------------------------------PHP安装列表-----------------------------"
    第二种方式使用cat
    echo "第二种菜单使用cat"
    cat<<EOF
                    1.INSTALL PHP5.4 
                    2.INSTALL PHP5.5 
                    3.INSTALL PHP7.1 
    EOF
    
    脚本的日志 需要把正确的结果和错误的都追加到日志文件中
    [root@shell /server/scripts/day3]# cat install_php.sh 
    #!/bin/sh
    echo "------------------------------PHP安装列表-----------------------------"
    echo "|             1.INSTALL PHP5.4               |"
    echo "|             2.INSTALL PHP5.5               |"
    echo "|             3.INSTALL PHP7.1               |"
    echo "------------------------------PHP安装列表-----------------------------"
    read -p "请输入你要安装的版本号的编号或者是版本: " num
    if [ $num -eq 1 ];then
        echo "源正在安装请稍等" &>>/php_install.log
        echo "安装PHP5.4源.................." &>>/php_install.log
        sleep 2 &>>/php_install.log
        echo "源安装成功" &>>/php_install.log
        echo "开始安装PHP..........." &>>/php_install.log
        sleep 2 
        echo "恭喜您PHP5.4安装成功" &>>/php_install.log
    
    
    
    判断是否安装文件成功
    [root@shell ~]# cat wget.sh 
    #!/bin/sh
    if [ `rpm -qa wget|wc -l` -eq 0 ];then
        yum -y install wget &>>gwet.log
        if [ $? -eq 0 ];then
            echo "wget安装成功"
        else
                echo "wget安装失败 请检查网络....."
        fi
    else
       echo "wget已经安装不需要重复安装"
    fi
    
    
    
    [root@shell /server/scripts/day3]# cat install_php.sh 
    #!/bin/sh
    echo "------------------------------PHP安装列表-----------------------------"
    echo "|             1.INSTALL PHP5.4               |"
    echo "|             2.INSTALL PHP5.5               |"
    echo "|             3.INSTALL PHP7.1               |"
    echo "------------------------------PHP安装列表-----------------------------"
    read -p "请输入你要安装的版本号的编号或者是版本: " num
    if [ $num -eq 1 ];then
        echo "源正在安装请稍等" &>>/php_install.log
        echo "安装PHP5.4源.................." &>>/php_install.log
        sleep 2 &>>/php_install.log
        echo "源安装成功" &>>/php_install.log
        echo "开始安装PHP..........." &>>/php_install.log
        sleep 2 
        echo "恭喜您PHP5.4安装成功" &>>/php_install.log
    elif [ $num -eq 2 ];then
            echo "源正在安装请稍等"
            echo "安装PHP5.5源.................."
            sleep 2
            echo "源安装成功"
            echo "开始安装PHP..........."
            sleep 2
            echo "恭喜您PHP5.5安装成功"
    elif [ $num -eq 3 ];then
        echo "源正在安装请稍等"
            echo "安装PHP7.1源.................."
            sleep 2
            echo "源安装成功"
            echo "开始安装PHP..........."
            sleep 2
            echo "恭喜您PHP7.1安装成功"
    fi
    
    
    ------------------多整数比较 
    [root@shell /server/scripts/day3]# cat install_php.sh 
    #!/bin/sh
    echo "------------------------------PHP安装列表-----------------------------"
    echo "|             1.INSTALL PHP5.4               |"
    echo "|             2.INSTALL PHP5.5               |"
    echo "|             3.INSTALL PHP7.1               |"
    echo "------------------------------PHP安装列表-----------------------------"
    read -p "请输入你要安装的版本号的编号或者是版本: " num
    if [ $num = "1" -o "$num" = "PHP5.4" ];then
        echo "源正在安装请稍等" 
        echo "安装PHP5.4源.................."
        sleep 2
        echo "源安装成功"
        echo "开始安装PHP..........."
        sleep 2 
        echo "恭喜您PHP5.4安装成功" 
    elif [ $num = 2 -o $num = "PHP5.5" ];then
            echo "源正在安装请稍等"
            echo "安装PHP5.5源.................."
            sleep 2
            echo "源安装成功"
            echo "开始安装PHP..........."
            sleep 2
            echo "恭喜您PHP5.5安装成功"
    elif [ $num = 3 -o $num = "PHP7.1" ];then
        echo "源正在安装请稍等"
            echo "安装PHP7.1源.................."
            sleep 2
            echo "源安装成功"
            echo "开始安装PHP..........."
            sleep 2
            echo "恭喜您PHP7.1安装成功"
    fi
    
    
    案例2:
    通过不同的系统版本号 安装不同的YUM源
    centos7 和 centos6 yum源不同
    判断网络是否通 如果不通使用systemctl restart network
    
    1.获取版本号
      [root@shell ~]# cat /etc/redhat-release |awk '{print $(NF-1)}'
      7.8.2003
    2.通过if判断 6 7
      
    3.6执行安装6的YUM源
       curl  
       wget   使用wget
       判断wget是否存在 不存在则安装
    7.7执行安装7的YUM源
    
    先写框架
    [root@shell /server/scripts/day3]# cat yum.sh 
    #!/bin/bash
    #centos6和centos7获取当前文件中的列不同
    os_ver=`cat /etc/redhat-release |awk '{print $(NF-1)}'`
    if [ ${os_ver%%.*} -eq 7 ]
    then
        wget -O /etc/yum.repos.d/shell-epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    elif [ ${os_ver%%.*} -eq 6 ]
    then
        wget -O /etc/yum.repos.d/shell-epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    else
        echo "请检查您的系统版本"
    fi
    
    
    
    ---------------------------------完善后
    [root@shell /server/scripts/day3]# cat yum.sh 
    #!/bin/bash
    #centos6和centos7获取当前文件中的列不同
    os_ver=`cat /etc/redhat-release |awk '{print $(NF-1)}'`
    if [ ${os_ver%%.*} -eq 7 ]
    then
        ping -c2 -W1 114.114.114.114 &>/dev/null
        if [ $? -ne 0 ];then
           echo "网络不通正在重启网络请稍后......"
           systemctl restart network
               ping -c2 -W1 114.114.114.114 &>/dev/null
           [ $? -ne 0 ] && echo "sendmail......管理员请尽快检查服务器的网络"
        fi
        if  [ `rpm -qa wget|wc -l` -eq 0 ];then
            yum -y install wget &>/dev/null
            if  [ $? -eq 0 ];then
            echo "wget 安装成功......."
            else
                echo "安装失败 检查网络或YUM源....."
        fi
        fi
        wget -O /etc/yum.repos.d/shell-epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &>/dev/null
        if [ $? -eq 0 ];then
           echo "YUM源更新成功"
        else
           echo "YUM源更新不成功 可能是由于网络引起"
        fi
    elif [ ${os_ver%%.*} -eq 6 ]
    then
        wget -O /etc/yum.repos.d/shell-epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    else
        echo "请检查您的系统版本"
            if [ $? -eq 0 ];then
           echo "YUM源更新成功"
        else
           echo "YUM源更新不成功 可能是由于网络引起"
        fi
    fi
    
    ---------------------------------------------------------------------------------------------
    二级菜单
    PHP MySQL Redis  Nginx 每个服务有不同的版本
    
    [root@shell /server/scripts/day3]# cat menu.sh
    #!/bin/sh
    while true
    do
    echo "------------------------------SERVER安装列表-----------------------------"
    echo "|             1.INSTALL PHP                |"
    echo "|             2.INSTALL MySQL              |"
    echo "|             3.INSTALL Redis              |"
    echo "|             4.INSTALL Nginx              |"
    echo "|             5.退出当前脚本                 |"
    echo "------------------------------SERVER安装列表-----------------------------"
    read -p "请输入你要安装服务的编号或者服务名称:[1|PHP|2|MySQL] " num
    if [ "$num" = "1" -o $num = "PHP" ];then
        echo "------------------------------PHP安装列表-----------------------------"
        echo "|                         1.INSTALL PHP5.1                          |"
        echo "|                         2.INSTALL PHP5.2                          |"
        echo "|                         3.INSTALL PHP5.3                          |"
        echo "|                         4.INSTALL PHP5.4                          |"
        echo "------------------------------PHP安装列表-----------------------------"
        read -p "请输入你要安装服务的编号或者版本号:[1|PHP|2|MySQL] " num1
            if [ "$num1" = "1" -o "$num1" = "PHP5.1" ];then
               echo "安装YUM源......."
           sleep 2
               echo "PHP5.1安装成功"
            elif [ "$num1" = "2" -o "$num1" = "PHP5.2" ];then
               echo "安装YUM源......."
               sleep 2
               echo "PHP5.2安装成功"
            fi
    elif [ "$num" = "2" -o $num = "MySQL" ];then
            echo "------------------------------MySQL安装列表-----------------------------"
            echo "|                         1.INSTALL MySQL5.4                          |"
            echo "|                         2.INSTALL MySQL8.0                          |"
            echo "|                         3.INSTALL MySQL8.1                          |"
            echo "|                         4.INSTALL MySQL8.2                          |"
            echo "------------------------------MySQL安装列表-----------------------------"
            read -p "请输入你要安装服务的编号或者版本号:[1|PHP|2|MySQL] " num2
            if [ "$num2" = "1" -o "$num2" = "MySQL5.4" ];then
               echo "安装YUM源......."
               sleep 2
               echo "MySQL5.4安装成功"
            elif [ "$num2" = "2" -o "$num2" = "MySQL5.5" ];then
               echo "安装YUM源......."
               sleep 2
               echo "MySQL5.5安装成功"
            fi
    elif [ "$num" = "5" ];then
        echo "欢迎下次再来再见!!!"
        exit
    fi
    done
    -----------------------------------------------------
    
    9.3猜数字脚本,当用户输入的数字和预设数字(随机生成一个0-100的数字)一样时,直接退出,否则让用户一直输入,并且提示用户的数字比语塞数字大或者小

    1.知道让命令随机生成一个数字

    echo $RANDOM(0-32767)
    echo $((RANDOM%100+1))   取余 1-100
    
    2.read读入让用户输入一个数字
    3.让用户输入的和生成的做比较 输出结果
    
    [root@shell /server/scripts/day3]# cat ran.sh
    #!/bin/sh
    ran=`echo $((RANDOM%100+1))`
    read -p "请输入要猜的数字1-100: " num
    if [ $num -gt $ran ];then
       echo "你输入的数字大了"
    elif [ $num -lt $ran ];then
       echo "你输入的数字小了"
    else
       echo "恭喜你猜对了!!"
    fi
    猜的次数---------------------------------------
    [root@shell /server/scripts/day3]# cat ran.sh 
    #!/bin/sh
    ran=`echo $((RANDOM%100+1))`
    while true
    do
            let i++
        read -p "请输入要猜的数字1-100: " num
        if [ $num -gt $ran ];then
           echo "你输入的数字大了"
        elif [ $num -lt $ran ];then
           echo "你输入的数字小了"
        else
           echo "恭喜你猜对了!! 源数字为$ran"
           echo "总共猜了$i 次"
           exit
        fi
    done
    

    相关文章

      网友评论

          本文标题:shell脚本

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