加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell编程企业级实战(2)

发布时间:2020-12-15 22:46:55 所属栏目:安全 来源:网络整理
导读:Vim配置文件.vimrc vim配置文件 if 条件语句 if是最常见的条件判断语句 ? ? 例1:如果不存在/ backup目录就创建。[[email?protected] /server/tools]# vim 07-01.sh #!/bin/bas path=/backup [ -d $path ] || mkdir $path -p # 相当于 # :冒号表示什么也不

Vim配置文件.vimrc

vim配置文件

if 条件语句

if是最常见的条件判断语句

?

?

例1:如果不存在/backup目录就创建。
[[email?protected] /server/tools]# vim 07-01.sh
#!/bin/bas
path=/backup
[ -d $path ] || mkdir $path -p
# 相当于
# :冒号表示什么也不干
if [ -d $path ]
then
??????? :
else
??????? mkdir $path -p
fi
# 或者
[ !-d $path ] && mkdir /backdir -p
# 相当于
if [ !-d $path ]
then
??????? mkdir /backdir -p
if
"07-01.sh" 18L,248C writte
vim命令:替换:%s#/backup#$path#g
例2:开发Shell脚本判断系统剩余内存的大小,如果低于100MB就提示内存不足,否则提示内存充足。 考查if双分支: 分析:
1)提取系统内存。 2)if判断, [[email?protected] 07]# cat 07_02.sh #!/bin/bash ############################################################## # File Name: 07_02.sh # Version: V1.0 # Author: pizza # Created Time : 2018-06-06 22:58:54 # Description: ############################################################## mem=`free -m|awk NR==3{print $NF}` if [ $mem -lt 1000 ] then echo "内存严重不足。" else echo "内存还够" fi

在第一章的中添加了内存不足发邮件的例子
例3:分别使用变量定义、read读入及脚本传参方式实现比较2个整数的大小。 1)变量定义: a=6 b=2 2)read读入: read -p "请输入两个数字:" a b 3)传参: 分析: 大于 等于 小于 #!/bin/bash
##############################################################
# File Name: 07-03.sh
# Version: V1.0
# Author: pizza
# Created Time : 2019-03-28 21:20:46
# Description:
##############################################################
# 第一种,传参
a=6
b=7
# 第二种,read
read -p "请输入两个数字" a b
# 第三种,参数
$a=$1
$b=$2
# 判断输入
# 1、判断数字是不是够,判断b是不是空,或者使用$#
# 2、判断是不是整数,利用expr
# 3、

if [ $a -gt $b ]
then
??? echo "$a>$b"
elif [ $a -lt $b ]
then
??? echo "$a<$b"
else
??? echo "$a=$b"
fi

例4:打印一个菜单如下,当用户选择对应的数字时,就执行对应项的应用。
1.install lamp 2.install lnmp 3.exit 第一章已讲解: bash内置核心命令read的企业级应用实践 read企业应用 [[email?protected] scripts]# cat select1.sh #!/bin/bash cat <<EOF 1.install lamp 2.install lnmp 3.exit EOF read -p "请选择一个序号(必须是数字):" num #1.判断是否为整数 expr 2 + $num &>/dev/null if [ $? -ne 0 ] then echo "Usage:$0 {1|2|3}" exit 1 fi #2.判断执行处理 if [ $num -eq 1 ] then echo "install lamp..." elif [ $num -eq 2 ] then echo "install lnmp..." elif [ $num -eq 3 ] then echo "bye." exit else echo "Usage:$0 {1|2|3}" exit 1 fi

?

Shell函数的知识与实践

函数的作用就是将程序里多次被调用的相同代码组合起来,并为其取个名字。其他所有想重复调用这部分代码的复方都只需要调用这个这个名字就可以了。当需要修稿这部分重复代码的时候,也只需要改变函数内的一份代码即可实现所有的修改,也可以把函数独立写到文件里面,当需要调用的时候,再加载进来。

?

函数的语法体

?

?

oldboy() {
    echo "I am oldboy."
}
function oldgirl {
    echo "I am oldgirl."
}
test() {
    echo "Hello world."
}
oldboy
oldgirl

[[email?protected] ~]# sh test_hanshu.sh
I am oldboy.
I am oldgirl.
Hello world.
[[email?protected] ~]#

?

向函数传参

带参数的函数编写执行
oldboy() {
    echo "I am $1."
}
oldboy oldboy
将函数传参转为脚本传参
oldboy() {
    echo "I am $1."
}
oldboy $1

函数和执行函数分离
./etc/init.d/function
pizza $1

?

Shell函数的执行注意事项

?

企业案例:通过脚本传参的方式,检查Web 网站URL是否正常。

wget命令:
--spider 模拟爬虫
-q 安静访问
-o /dev/null 不输出
-T --timeout 超时时间
-t --tries 重试次数
[[email?protected] ~]# wget --spider -T 5 -q -o /dev/null -t 2 www.baidu.com
[[email?protected] ~]# echo $?
0
curl命令:
-I 看响应头
-s 安静的 安静模式。不显示进度表或错误信息。使cURL 不反馈信息。
-o /dev/null 不输出
-w %{http_code} 返回状态码,200
-m 超时时间
[[email?protected] ~]# curl www.baidu.com -s &>/dev/null [[email?protected] ~]# echo $? 0 [[email?protected] ~]# curl -I -m 5 -s -w "%{http_code}n" -o /dev/null www.baidu.com 200 不用函数的实现写法 #!/bin/sh if [ $# -ne 1 ] then echo $"usage:$0 url" exit 1 fi wget --spider -q -o /dev/null --tries=1 -T 5 $1 #<==-T指定超时时间,这里的$1为脚本的参数。 if [ $? -eq 0 ] then echo "$1 is yes." else echo "$1 is no." fi 高端专业的函数写法: [[email?protected] ~]# cat checkurl.sh #!/bin/bash ############################################################## # File Name: checkurl.sh # Version: V1.0 # Author: oldboy # Organization: www.oldboyedu.com # Created Time : 2018-06-07 18:29:19 # Description: ############################################################## usage(){ echo "Usage:$0 url" exit 1 } checkurl(){ wget -q -o /dev/null -t 2 -T 5 $1 if [ $? -eq 0 ] then echo "$1 is ok" else echo "$1 is fail" fi } main(){ if [ $# -ne 1 ] then usage fi checkurl $1 } main $* [[email?protected] scripts]# cat 8_5_1.sh #!/bin/sh function usage() { #<==帮助函数 echo $"usage:$0 url" exit 1 } function check_url() { #<==检测URL函数。 wget --spider -q -o /dev/null --tries=1 -T 5 $1 #<==这里的$1就是函数传参。 if [ $? -eq 0 ] then echo "$1 is yes." else echo "$1 is no." fi } function main() { #<==主函数。 if [ $# -ne 1 ] #<==如果传入的多个参数,则打印帮助函数,提示用户。 then usage fi check_url $1 #<==接收函数的传参,即把结尾的$*传到这里。 } main $* #<==这里的$*就是把命令行接收的所有参数作为函数参数传给函数内部,常用手法。

?

?

CASE结构条件句

几乎所有的case都可以用if替代
case "$1" in
    1)
    dddd
    ;;
    2)
    dddd
    ;;
    *)
    dddd
esac

企业应用:
启动脚本
read 读入 菜单选择。

范例9_2:执行shell脚本,打印一个如下的水果菜单:
1.apple
2.pear
3.banana
4.cherry
当用户输入对应的数字选择水果的时候,告诉他选择的水果是什么,并给水果单词加上一种颜色(随意),要求用case语句实现。
范例9_3:给内容加不同的颜色。
内容的颜色用数字表示,范围为30-37,每个数字代表一种颜色。代码如下:
echo -e "33[30m 黑色字 33[0m" #<==30m表示黑色字。
echo -e "33[31m 红色字 33[0m" #<==31m表示红色字。
echo -e "33[32m 绿色字 33[0m" #<==32m表示绿色字。
echo -e "33[33m 棕色字 33[0m" #<==33m表示棕色字(brown),和黄色字相近。
echo -e "33[34m 蓝色字 33[0m" #<==34m表示蓝色字。
echo -e "33[35m 洋红字 33[0m" #<==35m表示洋红色字(magenta),和紫色字相近。
echo -e "33[36m 蓝绿色 33[0m" #<==36m表示蓝绿色字(cyan),和浅蓝色字相近。
echo -e "33[37m 白色字 33[0m" #<==37m表示白色字。
说明:不同的数字对应的字体颜色,见系统帮助(来源man console_codes命令的结果)。
范例9_6: 给输出的字符串加不同的背景颜色。
字的背景颜色对应的数字范围为40-47,代码如下。
echo -e "33[40;37m 黑底白字33[0m"   #<==40m表示黑色背景。
echo -e "33[41;37m 红底白字33[0m"   #<==41m表示红色背景。
echo -e "33[42;37m 绿底白字33[0m"   #<==42m表示绿色背景。
echo -e "33[43;37m 棕底白字33[0m"   #<==43m表示棕色背景(brown),和黄色背景相近。
echo -e "33[44;37m 蓝底白字33[0m"   #<==44m表示蓝色背景。
echo -e "33[45;37m 洋红底白字33[0m"  #<==45m表示洋红色背景(magenta),和紫色背景相近。
echo -e "33[46;37m 蓝绿底白字33[0m"   #<==46m表示蓝绿色背景(cyan),和浅蓝色背景相近。
echo -e "33[47;30m 白底黑字33[0m"    #<==47m表示白色背景。

创建case3.sh,定义函数 ,执行函数color $*
创建case4.sh,用.或者source调用函数,打印菜单,输入数字,显示不同颜色的字体 范例9_10:利用case语句开发Rsync服务启动停止脚本,本例采用case语句以及新的思路来实现。 分析: 启动: rsync
--daemon 停止: pkill rsync killall rsync kill 进程号 ---->最专业的方法 /etc/init.d/rsyncd {start|stop|restart} case

?rsync.sh简单版

case "$1" in
    start)
        rsync --deamon
        if [ $? -eq 0 ]
        then
            echo "rsync startup ok"
        else
            echo "rsync startup fail"
        fi
        ;;
    stop)
        killall rsync
        if [ $? -eq 0 ]
        then
            echo "rsync stop ok"
        else
            echo "rsync stop fail"
        fi
        ;;
    restart)
        killall rsync && sleep 1 && rsync --deamon
        if [ $? -eq 0 ]
        then
            echo "rsync restart ok"
        else
            echo "rsync restart fail"
        fi
        ;;

    *)
        echo "usage:$0 {start|stop|restart}"
        exit 1
esac

?

升级版

 start(){                                                                                                        
     rsync --deamon
     retval=$?
     if [ $retval -eq 0 ]
     then
         echo "rsync startup ok"
         return $retval
     else
         echo "rsync startup fail"
         return $retval
     fi
 }
 stop(){
     killall rsync
     retval=$?
     if [ $? -eq 0 ]
     then
          echo "rsync stop ok"
                                                                                                  9,1           Top
        return $retval
    else
        echo "rsync restart fail"
        return $retval
    fi  
    }   
case "$1" in
    start)
        start
        # 为了向外传值
        retval=$?
        ;;  
    stop)
        stop
        retval=$?
        ;;  
    restart)
        restart
        retval=$?
        ;;  

    *)  
        echo "usage:$0 {start|stop|restart}"
        exit 1
esac

?

想要使用chkconfig(man ckhconfig),找到这些信息

RUNLEVEL FILES
       Each service which should be manageable by chkconfig needs two or more commented lines added to its init.d
       script. The first line tells chkconfig what runlevels the service should be started in by default,as well
       as the start and stop priority levels. If the service should not,by default,be started in any runlevels,a  -  should  be used in place of the runlevels list.  The second line contains a description for the ser                        

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读