zoukankan      html  css  js  c++  java
  • DBA需要掌握的shell知识

    每个中高级DBA都需要掌握一些简单脚本的编写,这样才能从繁杂重复的基础维护工作中解脱出来,才能有时间去研究更有价值的技术。VBird在讲shell script的时候,给出了几个经典的小范例练习,对于初学shell的人来说是很好的入门,现就根据VBird给出的几个典型练习进行近一步的系统整理,总结出bash shell的系统知识,希望能给各位读者起到抛砖引玉的作用。

    1. 顺序执行
    2. 分支判断
    3. 循环结构
    4. 巩固练习

    1.顺序执行

    **练习1:用户选择输入Y/N,不区分大小写,根据用户输入屏幕打印不同内容。** 考查:read,[],exit 0,&&,echo
    #!/bin/bash
    #Usage: user input a charector, program shows the different result.
    #Author: Alfred Zhao
    #Creation: 2015-05-06
    #Version: 1.0.0
    
    #1.Input 'Y' or 'N'
    read -p "Input (Y/N)" input 
    [ "$input" == "Y" -o "$input" == "y" ] && echo -e "you choice is: $input
    " && exit 0
    [ "$input" == "N" -o "$input" == "n" ] && echo -e "you choice is: $input
    " && exit 0
    echo -e "I don't know what your choice is" && exit 0
    

    2.分支判断

    两种常用的分支判断:if...else...fi分支判断,case...esac分支判断。

    练习2:将练习1中的代码改写为if分支判断,使程序的执行逻辑更直观。
    考查:==,||
    if[]; then
    ...
    elif[]; then
    ...
    else
    ...
    fi

    #!/bin/bash
    #Usage: user input a charector, program shows the different result.
    #Author: Alfred Zhao
    #Creation: 2015-05-06
    #Version: 1.0.1
    
    #1.Input 'Y' or 'N'
    read -p "Input (y/n)" input
    if [ "$input" == "Y" ] || [ "$input" == "y" ]; then
    	echo -e "you choice is: $input
    "
    	exit 0
    elif [ "$input" == "N" ] || [ "$input" == "n" ]; then
    	echo -e "you choice is: $input
    "
    	exit 0
    else
    	echo -e "I don't know what you choice is.
    "
    	exit 0
    fi
    

    练习3:用分支判断来辨别参数1的输入是否合法。
    考查:$0,$1

    #!/bin/bash
    #Usage: To judge $1's identity. Aha, Only Alfred is ok. 
    #Author: Alfred Zhao
    #Creation: 2015-05-07
    #Version: 1.0.0
    
    if [ "$1" == "Alfred" ]; then
    	echo -e "Authorization Successful! 
    "
    	exit 0
    elif [ "$1" == "" ]; then
    	echo -e "Waring: Authorization is null! ex> {$0 Username}
    "
    	exit 0
    else
    	echo -e "Waring: Only Alfred can be authorized. ex> {$0 Alfred}
    "
    	exit 0
    fi
    

    练习4:用case判断改写练习3.
    考查:case...esac判断

    #!/bin/bash
    #Usage: To judge $1's identity. Aha, Only Alfred is ok. 
    #Author: Alfred Zhao
    #Creation: 2015-05-07
    #Version: 1.0.1
    
    case "$1" in
    	"Alfred")
    		echo -e "Authorization Successful! 
    "
    		;;
    	"")
    		echo -e "Waring: Authorization is null! ex> {$0 Username}
    "
    		;;
    	*)
    		echo -e "Waring: Only Alfred can be authorized. ex> {$0 Alfred}
    "
    		;;
    esac
    

    3.循环结构

    ## while do done, until do done(不定循环) ## **练习5:输入名字直到输入的名字是“Alfred”为止。** 考查:while do done
    #!/bin/bash
    #Usage: Input the name until it is "Alfred". 
    #Author: Alfred Zhao
    #Creation: 2015-05-07
    #Version: 1.0.0
    
    while [ "$name" != "Alfred" ]
    do
            read -p "Please Input your name: " name
    done
    echo -e "
    Welcome, My friend, Alfred.
    "
    

    而如果是使用until do done,
    只需要修改while [ "$name" != "Alfred" ]until [ "$name" == "Alfred" ]

    练习6:计算1+2+3+...+num的结果
    考察:正则

    #!/bin/bash
    #Usage: Calculate the result "1+2+...+num". 
    #Author: Alfred Zhao
    #Creation: 2015-05-07
    #Version: 1.0.0
    
    i=0 #i
    s=0 #sum
    
    echo -e "This program will help you calculate the result of '1+2+...+num'
    "
    read -p "Please input your num: " num
    
    if [ "$(echo "$num"|grep '[0-9]'|grep -v '[:alpha:]')" == "" ]; then
            echo -e "Waring: Please input a number.
    "
            exit 1
    elif [ "$num" -lt "1" ]; then
            echo -e "Waring: Not support.
    "
    elif [ "$num" == "1" ]; then
            echo -e "1=1
    "
            exit 0
    elif [ "$num" == "2" ]; then
            echo -e "1+2=3
    "
            exit 0
    elif [ "$num" == "3" ]; then
            echo -e "1+2+3=6
    "
            exit 0
    else
            while [ "$i" != "$num" ]
            do
                    i=$(($i+1))
                    s=$(($s+$i))
            done
    
            echo -e "
    1+2+...+$num= $s
    "
            exit 0
    fi
    

    for do done(固定循环)

    for do done 第一种用法示例:
    练习7:循环输出变量who的内容

    #!/bin/bash
    #Usage: for do done 
    #Author: Alfred Zhao
    #Creation: 2015-05-07
    #Version: 1.0.0
    
    for who in mum dad brother sister 
    do
            echo -e "This is my ${who}.
    "
    done
    

    for do done 第二种用法示例:
    练习8:计算1+2+..+100的值

    #!/bin/bash
    #Usage: 1+2+...+100
    #Author: Alfred Zhao
    #Creation: 2015-05-07
    #Version: 1.0.0
    sum=0
    for ((i=1; i<=100; i=i+1))
    do
            sum=$(($sum+$i))
    done
        
    echo -e "The result is $sum.
    "
    

    4.巩固练习

    1.用分支判断哪些数据库默认端口在运行.

    提示:不同数据库的默认监听端口不同
    Oracle数据库判断netstat -tuln |grep ":1521 "是否有结果;
    Mysql数据库判断netstat -tuln |grep ":3306 "是否有结果;
    IEE数据库判断netstat -tuln |grep ":5029 "是否有结果;
    Vertica数据库判断netstat -tuln |grep ":5433 "是否有结果.

    2.输入毕业日期,计算当前离毕业还有多少天。

    提示:将时间换算成秒,相减后换算成天数。
    day1=$(date --date="20150507" +%s)
    day2=$(date --date="20160630" +%s)
    days=$((($day2-$day1)/3600/24))

    3.检查Linux系统所有用户的标识符与特殊参数

    提示:cut -d ':' -f1 /etc/passwd

    4.检查192.168.1.1~192.168.1.100的主机网络情况

    提示:for site in $(seq 1 100)

    reference

    《鸟哥的Linux私房菜》
  • 相关阅读:
    HDU 3695 Computer Virus on Planet Pandora
    codeforces 706D Vasiliy's Multiset
    HDU 2222 Keywords Search
    POJ 2348 Euclid's Game
    HDU 1079 Calendar Game
    js选项卡的实现方法
    实现鼠标悬浮切换标题和内容
    js实现鼠标悬浮切换 setTab 代码实现
    自学Node.js: WebStorm+Node.js开发环境的配置
    windows 下安装nodejs
  • 原文地址:https://www.cnblogs.com/jyzhao/p/4485553.html
Copyright © 2011-2022 走看看