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
原文地址:https://www.cnblogs.com/maplethefox/p/11438711.html