zoukankan      html  css  js  c++  java
  • Shell编程2

    字符串处理 - ${变量名 替换符号 匹配条件}

    从左向右删除

    # 1、语法
    ${变量名##匹配条件}
    
    # 2、示例
    directory="/home/tarena/mysql"   # 注意{}中不需要加空格
    echo ${directory##*/}   --> mysql
    echo ${directory#*/}    --> home/tarena/mysql

    从右向左删除

    # 1、语法
    ${变量名%%匹配条件}
    
    # 2、示例
    directory="/home/tarena/mysql"
    echo ${directory%%/mysql}   --> /home/tarena
    echo ${directory%/*}        --> /home/tarena
    echo ${directory%%/*}       --> ""

    案例

    # 1、输出系统中的前10个用户
    
    方法1:
    #!/bin/bash
    # root:x:0:0:root:/root:/bin/bash
    for line in `head -10 /etc/passwd`
    do
        echo ${line%%:*}
    done
    
    方法2: awk
    # root:x:0:0:root:/root:/bin/bash
    awk -F ':' '{print $1}' /etc/passwd | head
    
    方法3: sed 's/原内容/新内容/g'
    sed 's/:.*//g' /etc/passwd | head

    练习批量修改文件名 : 把当前目录下的.txt文件全部改为.doc文件

    # 创建10个 .txt 文件
    touch file{1..10}.txt
    
    #!/bin/bash
    for filename in `ls *.txt`
    do
        # file1.txt  -->  file1.doc
        name=${filename%.txt}
        mv $filename $name.doc
    done

    shell磨练

    1、依次提示用户输入3个整数,脚本根据数字大小依次排序输出 3个数字

    # shell实现
    #!/bin/bash
    
    read -p "请输入第一个整数:" n1
    read -p "请输入第二个整数:" n2
    read -p "请输入第三个整数:" n3
    
    # 1.保证n1是最小值
    if [ $n1 -ge $n2 ];then
        temp=$n1 n1=$n2 n2=$temp
    fi
    if [ $n1 -ge $n3 ];then
        temp=$n1 n1=$n3 n3=$temp
    fi
    # 2.判断n2和n3
    if [ $n2 -ge $n3 ];then
        temp=$n2 n2=$n3 n3=$temp
    fi
    
    echo "排序后:$n1 $n2 $n3"
    
    # python
    n1 = int(input('第一个:'))
    n2 = int(input('第二个:'))
    n3 = int(input('第三个:'))
    
    L = [n1,n2,n3]
    L.sort()
    print(L)

    2、编写脚本,实现人机<石头,剪刀,布>游戏

    # 提示 - Linux中数组使用
    # Linux数组: (元素1 元素2 元素3)  元素之间用空格隔开
    game=("石头" "剪刀" "")
    ${game[0]}
    # 电脑随机出拳
    ${game[$[RANDOM%3]]}

    shell代码实现

    #!/bin/bash
    
    # 1.电脑出拳
    game=("石头" "剪刀" "")
    computer=${game[$[RANDOM%3]]}
    # 2.用户出拳
    echo "+---------------------+"
    echo "+     1.石头          +"
    echo "+     2.剪刀          +"
    echo "+     3.布            +"
    echo "+---------------------+"
    read -p "请出拳(1/2/3):" you
    # 3.做判断
    case $you in
    1)
        if [ $computer == "石头" ];then
        echo "平局"
        elif [ $computer == "剪刀" ];then
        echo "你赢"
        else
        echo "计算机赢"
        fi
        ;;
    
    2)
        if [ $computer == "石头" ];then
        echo "计算机赢"
        elif [ $computer == "剪刀" ];then
        echo "平局"
        else
        echo "你赢"
        fi
        ;;
    3)
        if [ $computer == "石头" ];then
        echo "你赢"
        elif [ $computer == "剪刀" ];then
        echo "计算机赢"
        else
        echo "平局"
        fi
        ;;
    *)
        echo "出拳无效!请输入1/2/3"
        ;;
    esac

    python代码实现

    #!/usr/bin/env python3
    import random
    
    all_list = ['石头','剪刀','']
    win_list = [['石头','剪刀'],['剪刀',''],['','石头']]
    computer = random.choice(all_list)
    
    you = input('1.石头
    2.剪刀
    3.布
    请出拳(1/2/3):')
    
    if all_list[int(you)-1] == computer:
        print('平局')
    elif [all_list[int(you)-1],computer] in win_list:
        print('你赢')
    else:
        print('计算机赢')

    3、每2秒中检测一次MySQL数据库的连接数量

    # mysqladmin命令
    mysql服务器管理任务的工具,它可以检查mysql服务器的配置和当前工作状态
    
    mysqladmin -uroot -p123456 status

    代码实现

    #!/bin/bash
    
    while :
    do
       count=`mysqladmin -uroot -p123456 status | awk '{print $4}'`
       echo "`date +%F` 并发连接数为: $count"
       sleep 2
    done

    4、根据md5校验码,检测文件是否被修改

    # 1、生成md5的文件校验码
    md5sum nginx.conf
    
    /etc/*.conf 做md5校验码,md5file.txt
    
    # 2、diff命令: 两个文件找不同
    diff 文件1 文件2
    # 文件1第30行 change 文件2第30行 
    30c30
    < 291e59190bb2c52e01fa7fa9ebb2ba01  /etc/test.conf
    ---
    > 7cdda976172d4819ac60401235647806  /etc/test.conf

    代码实现

    #!/bin/bash
    
    for file in `ls /etc/*.conf`
    do
        md5sum $file >> md5log2.txt
    done

    5、备份MySQL数据库

    # 数据库备份命令
    mysqldump -hIP -uroot -p123456 库 > xxx.sql

    代码实现

    #!/bin/bash
    
    user="root"
    password="123456"
    dbname="mysql"
    date=$(date +%Y%m%d)
    
    # ! 和 -d之间要加空格
    [ ! -d /home/tarena/backup ] && mkdir /home/tarena/backup
    
    mysqldump -u"$user" -p"$password" "$dbname" > /home/tarena/backup/"$dbname"-${date}.sql

    6、随机生成8为密码-字母、数字、__

    # 1.获取字符串长度: ${#变量名}
    # 2.字符串索引切片: ${变量名:起始索引:1}
    key=''
    length=${#key}
    ${key:$[RANDOM%length]:1}

    代码实现

    #!/bin/bash
      
    key='qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM_'
    length=${#key}
    
    pass=''
    for i in {1..8}
    do
        pass=$pass${key:$[RANDOM%length]:1}
    done
    
    echo $pass
  • 相关阅读:
    再提一个建议,不过就要辛苦dudu了
    项目中的小项目实现在望
    Visual Studio.Net 技术Tip
    IQueryable与foreach的困惑?
    [转贴]浅析大型网站的架构
    [原创]WCF入门级使用教程(转载请注明出处)
    [原创]在msmq3.0中使用http协议发送消息
    [转贴][WCF Security] 4. 用户名/密码身份验证
    [转贴][WCF Security] 1. 基本概念
    [转]在SQL Server2005中进行错误捕捉
  • 原文地址:https://www.cnblogs.com/maplethefox/p/11438711.html
Copyright © 2011-2022 走看看